刨析源码,深层讲解 Java-集合框架( 七 )


/*添加、删除、修改操作:Object put(Object key,Object value):将指定key-value添加到(或修改)当前map对象中void putAll(Map m):将m中的所有key-value对存放到当前map中Object remove(Object key):移除指定key的key-value对,并返回valuevoid clear():清空当前map中的所有数据*/@Testpublic void test3(){Map map = new HashMap();//添加map.put("AA",123);map.put(45,123);map.put("BB",56);//修改map.put("AA",87);System.out.println(map);//{AA=87, BB=56, 45=123}Map map1 = new HashMap();map1.put("CC",123);map1.put("DD",123);map.putAll(map1);System.out.println(map);//{AA=87, BB=56, CC=123, DD=123, 45=123}//remove(Object key)Object value = http://www.kingceram.com/post/map.remove("CC");System.out.println(value);//123System.out.println(map);//{AA=87, BB=56, DD=123, 45=123}//clear()map.clear();//与map = null操作不同System.out.println(map.size());//0System.out.println(map);//{}}
/*元素查询的操作:Object get(Object key):获取指定key对应的valueboolean containsKey(Object key):是否包含指定的keyboolean containsValue(Object value):是否包含指定的valueint size():返回map中key-value对的个数boolean isEmpty():判断当前map是否为空boolean equals(Object obj):判断当前map和参数对象obj是否相等*/@Testpublic void test4(){Map map = new HashMap();map.put("AA",123);map.put(45,123);map.put("BB",56);// Object get(Object key)System.out.println(map.get(45));//123//containsKey(Object key)boolean isExist = map.containsKey("BB");System.out.println(isExist);//trueisExist = map.containsValue(123);System.out.println(isExist);//truemap.clear();System.out.println(map.isEmpty());//true}
/*元视图操作的方法:Set keySet():返回所有key构成的Set集合Collection values():返回所有value构成的Collection集合Set entrySet():返回所有key-value对构成的Set集合*/@Testpublic void test5(){Map map = new HashMap();map.put("AA",123);map.put(45,1234);map.put("BB",56);//遍历所有的key集:keySet()Set set = map.keySet();Iterator iterator = set.iterator();while(iterator.hasNext()){System.out.println(iterator.next());}//AA//BB//45System.out.println();//遍历所有的value集:values()Collection values = map.values();for(Object obj : values){System.out.println(obj);}//123//56//1234System.out.println();//遍历所有的key-value//方式一:entrySet()Set entrySet = map.entrySet();Iterator iterator1 = entrySet.iterator();while (iterator1.hasNext()){Object obj = iterator1.next();//entrySet集合中的元素都是entryMap.Entry entry = (Map.Entry) obj;System.out.println(entry.getKey() + "---->" + entry.getValue());}//AA---->123//BB---->56//45---->1234System.out.println();//方式二:Set keySet = map.keySet();Iterator iterator2 = keySet.iterator();while(iterator2.hasNext()){Object key = iterator2.next();Object value = http://www.kingceram.com/post/map.get(key);System.out.println(key +"=====" + value);}//AA=====123//BB=====56//45=====1234}
3. Map实现类之一: 3.1 概述
? 作为Map的主要实现类,线程不安全的,效率高,可存储null的key和value
? 是 Map接口使用频率最高的实现类 。
? 允许使用null键和null值,与一样,不保证映射的顺序 。
? 所有的key构成的集合是Set:无序的、不可重复的 。所以,key所在的类要重写: ()和()
? 所有的value构成的集合是:无序的、可以重复的 。所以,value所在的类要重写:()
? 一个key-value构成一个entry,所有的entry构成的集合是Set:无序的、不可重复的
?判断两个 key 相等的标准是:两个 key 通过 () 方法返回 true,值也相等 。
?判断两个 value相等的标准是:两个 value 通过 () 方法返回 true 。
? 的存储结构
JDK 7及以前版本:是数组+链表结构(即为链地址法)