一、Map
1.Map用于保存具有映射关系的数据,因此Map集合里保存着两组值,一组用于保存Map里的Key,另外一组用于保存Map里的Value。
2.Map中的key和value都可以是任何引用类型的数据。
3.Map中的Key不允许重复,即同一个Map对象的任何两个Key通过equals方法比较都返回false。
4.Key和Vaiue之间存在单向一对一的关系,即通过指定的Key总能找到唯一,确定的Value。
二、Map接口和HashMap类
package day16; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class Test6 { public static void main(String[] args){ Map<String,Integer> map = new HashMap<String,Integer>(); map.put("b", 1);//添加数据 map.put("c", 2); map.put("e", 2); System.out.println(map); System.out.println(map.get("b"));//根据key取值 map.remove("c");//根据key来移除键值对 System.out.println(map); System.out.println(map.size());//map集合的长度 System.out.println(map.containsKey("b"));//判断当前的map集合是否包含指定的key; System.out.println(map.containsValue(1));//判断当前的map集合是否包含指定的Value // map.clear();//清空集合 Set<String>keys = map.keySet();//获取map集合的key的集合 map.values();//获取map集合的values的集合 //遍历map集合,通过map.keySet(); for(String key : keys){ System.out.println("key:" + key + ",value:" + map.get(key)); } //通过map.entrySet();遍历map集合 Set<Entry<String,Integer>> entrys = map.entrySet(); for(Entry<String,Integer>en : entrys){ System.out.println("key:" + en.getKey() + ",value:" + en.getValue()); } } }
打印结果为:
三、HashMap & Hashtable
1.HashMap和Hashtable是Map接口的两个典型实现类,区别在于:
①Hashtable是一个古老的Map实现类,不建议使用。
②Hashtable是一个线程安全的Map实现,但HashMap是线程不安全的。
③Hashtable不允许使用null作为key和value,而HashMap可以。
2.与HashSet集合不能保证元素的排列顺序一样,HashMap和Hashtable也不能保证其中key-value对的顺序。
3.HashMap、Hashtable判断两个key相等的标准是:两个Key通过equals方法返回true,hashCode值也相等。
四、TreeMap
1.TreeMap存储Key-Value对时,需要根据Key对key-value对进行排序。TreeMap可以保证所有的Key-Value对处于有序状态。
2.TreeMap的Key的排序:
①自然排序:TreeMap的所有的Key必须实现Comparable接口,而且所有的Key应该是同一个类的对象,否则将会抛出ClassCastException.
②定制排序(了解):创建TreeMap时,传入一个Comparable对象,该对象负责对TreeMap中的所有key进行排序。此时不需要Map的Key实现Comparable接口。
3.一般使用map集合,不会使用过于复杂的对象做key。
package day16; import java.util.Map; import java.util.TreeMap; public class Test6 { public static void main(String[] args){ //TreeMap的自然排序是字典排序 Map<Integer,String> map = new TreeMap<Integer,String>(); map.put(4, "a"); map.put(2, "a"); map.put(3, "a"); map.put(1, "a"); System.out.println(map); Map<String,String> map1 = new TreeMap<String,String>(); map1.put("b", "b"); map1.put("c", "c"); map1.put("d", "d"); map1.put("a", "a"); map1.put("ab", "ab"); map1.put("1", "ab"); map1.put("10", "ab"); System.out.println(map1); } }
打印结果是: