第十七章 Java的容器(Map)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十七章 Java的容器(Map)相关的知识,希望对你有一定的参考价值。
1.依赖Hash表的集合(HashSet,LinkedHashSet,HashMap,LinkedHashMap)都是由HashCode()和equals()方法保证唯一性
自定义对象要重写HashCode()和equals()方法
TreeSet和TreeMap是基于二叉树和红黑树的实现,实现Comparable或者Comparator接口来排序并且保证了唯一性
1 package cn.itcast_02; 2 3 import java.util.Collection; 4 import java.util.HashMap; 5 import java.util.Map; 6 import java.util.Map.Entry; 7 import java.util.Set; 8 9 /*Map集合的功能概述: 10 * 1.添加功能:V put(K key,V value):添加元素 11 * key不存在就直接存储,返回null;key存在就将值覆盖并返回以前的value 12 * 2.删除功能:void clear():移除所有的键值对元素 13 * V remove(Object key):根据键删除键值对元素,并把值返回 14 * 3.判断功能:boolean containsKey(Object key):判断集合是否包含指定的键 15 * boolean containsValue(Object value):判断集合是否包含指定的值 16 * boolean isEmpty():判断集合是否为空 17 * 4.获取功能:Set<Map.Entry<K,V>> entrySet():??? 18 * V get(Object key):根据键获取值 19 * Set<K> keySet():获取集合中所有键的集合 20 * Collection<V> values():获取集合中所有值的集合 21 * 5.长度功能:int size():返回集合中的键值对的对数 22 * 23 */ 24 public class MapDemo { 25 public static void main(String[] args) { 26 /*Map<Integer, String> map = new HashMap<>(); 27 //添加元素 28 System.out.println(map.put(1, "hello"));//null 29 System.out.println(map.put(1, "world"));//hello 30 //移除元素 31 System.out.println(map.remove(1));//world 32 */ 33 Map<String, String> map = new HashMap<>(); 34 map.put("张三", "aaa"); 35 map.put("张三", "aaa"); 36 map.put("李四", "bbb"); 37 map.put("王五", "ccc"); 38 map.put("马六", "ddd"); 39 map.put("红旗", "eee"); 40 //根据键来获取值(V get(Object key)) 41 /*System.out.println(map.get("张三"));//aaa 42 System.out.println(map.get("李四"));//bbb 43 */ //获取所有键的集合(Set<K> keySet()) 44 Set<String> set = map.keySet(); 45 for (String s : set) { 46 //System.out.println(s); 47 System.out.println(map.get(s)); 48 } 49 System.out.println("-----------"); 50 //获取所有值的集合 51 Collection<String> con = map.values(); 52 for (String string : con) { 53 System.out.println(string); 54 } 55 System.out.println("---------"); 56 //获取所有键值对的对象集合 57 Set<Map.Entry<String, String>> entries = map.entrySet(); 58 for (Entry<String, String> entry : entries) { 59 String key = entry.getKey(); 60 String value = entry.getValue(); 61 System.out.println(key+"--"+value); 62 } 63 } 64 }
2.LinkedHashMap<K,V>是map接口的哈希表和链表实现,哈希表保证键的唯一,链表保证存取一致,键是自定义对象时要重写
HashCode()和equals()方法
3.TreeMap是基于红黑树的Map接口的实现
1 package cn.itcast_04; 2 3 import java.util.Set; 4 import java.util.TreeMap; 5 6 /* 7 * TreeMap:是基于红黑树的Map接口的实现。 8 * 9 * HashMap<String,String> 10 * 键:String 11 * 值:String 12 */ 13 public class TreeMapDemo { 14 public static void main(String[] args) { 15 // 创建集合对象 16 TreeMap<String, String> tm = new TreeMap<String, String>(); 17 18 // 创建元素并添加元素 19 tm.put("hello", "你好"); 20 tm.put("world", "世界"); 21 tm.put("java", "爪哇"); 22 tm.put("world", "世界2"); 23 tm.put("javaee", "爪哇EE"); 24 25 // 遍历集合 26 Set<String> set = tm.keySet(); 27 for (String key : set) { 28 String value = tm.get(key); 29 System.out.println(key + "---" + value); 30 } 31 } 32 }
1 package cn.itcast_04; 2 3 import java.util.Comparator; 4 import java.util.Set; 5 import java.util.TreeMap; 6 7 /* 8 * TreeMap<Student,String> 9 * 键:Student 10 * 值:String 11 */ 12 public class TreeMapDemo2 { 13 public static void main(String[] args) { 14 // 创建集合对象 15 TreeMap<Student, String> tm = new TreeMap<Student, String>( 16 new Comparator<Student>() { 17 @Override 18 public int compare(Student s1, Student s2) { 19 // 主要条件 20 int num = s1.getAge() - s2.getAge(); 21 // 次要条件 22 int num2 = num == 0 ? s1.getName().compareTo( 23 s2.getName()) : num; 24 return num2; 25 } 26 }); 27 28 // 创建学生对象 29 Student s1 = new Student("潘安", 30); 30 Student s2 = new Student("柳下惠", 35); 31 Student s3 = new Student("唐伯虎", 33); 32 Student s4 = new Student("燕青", 32); 33 Student s5 = new Student("唐伯虎", 33); 34 35 // 存储元素 36 tm.put(s1, "宋朝"); 37 tm.put(s2, "元朝"); 38 tm.put(s3, "明朝"); 39 tm.put(s4, "清朝"); 40 tm.put(s5, "汉朝"); 41 42 // 遍历 43 Set<Student> set = tm.keySet(); 44 for (Student key : set) { 45 String value = tm.get(key); 46 System.out.println(key.getName() + "---" + key.getAge() + "---" 47 + value); 48 } 49 } 50 }
以上是关于第十七章 Java的容器(Map)的主要内容,如果未能解决你的问题,请参考以下文章