map jdk1.2有
类型 | HashMap | LinkedHashMap | TreeMap | Hashtable | Properties | CurrentHashMap |
---|---|---|---|---|---|---|
实现接口 | Map | Map | Map | Map | ||
列数 | 双列集合 | 双列集合 | 双列集合 | 双列集合 | 双列集合 | 双列集合 |
数据 | key-value | key-value | key-value | key-value | key-value | key-value |
Jdk出现版本 | 1.2 | 1.4 | 1.2 | 1.0 | ||
顺序 | 无顺序 | 有顺序 | ||||
适用场景 | 访问查询遍历多,插入删除少 | 配置文件,key、value是string类型 | ||||
效率 | 高 | 低 | ||||
相等判断 | 重写hashcode()、equal() | 重写hashcode()、equal() | 不需要 | |||
名字 | ||||||
数据单位 | [k-v][to] | [to][k-v][to] | 红黑树 | |||
数据单位 | [Entry][to] | [to][Entry][to] | 红黑树 | |||
数据原理 | [Entry][to][Entry][to] | [to][Entry][to][to][Entry][to] | ||||
null | 可以出现null,null | 不可以出现null,null | ||||
初始化 | Map m = new HashMap(); | TreeMap map = new TreeMap(); | Properties pros = new Properties(); | |||
查规则 | Object get(Object key) | 同左 | 同左 | 同左 | 同左 | 同左 |
查 | xx.get() | 同左 | 同左 | 同左 | 同左 | 同左 |
增规则 | Object put(Object key,Object value) | 同左 | 同左 | 同左 | 同左 | 同左 |
增 | xx.put() | 同左 | 同左 | 同左 | 同左 | 同左 |
全增规则 | void putAll(Map m) | 同左 | 同左 | 同左 | 同左 | 同左 |
全增 | xx.putAll() | 同左 | 同左 | 同左 | 同左 | 同左 |
删规则 | Object remove(Object key) | 同左 | 同左 | 同左 | 同左 | 同左 |
删 | xx.remove() | 同左 | 同左 | 同左 | 同左 | 同左 |
全删规则 | void clear() | 同左 | 同左 | 同左 | 同左 | 同左 |
全删 | xx.clear() | 同左 | 同左 | 同左 | 同左 | 同左 |
改规则 | E set(int index, E element) | 同左 | 同左 | 同左 | 同左 | 同左 |
改 | xx.set() | 同左 | 同左 | 同左 | 同左 | 同左 |
包含指定的key | boolean containsKey(Object key) | 同左 | 同左 | 同左 | 同左 | 同左 |
包含指定的value | boolean containsValue(Object value) | 同左 | 同左 | 同左 | 同左 | 同左 |
个数 | int size() | 同左 | 同左 | 同左 | 同左 | 同左 |
是否为空 | boolean isEmpty() | 同左 | 同左 | 同左 | 同左 | 同左 |
判断当前map和参数对象obj是否相等 | boolean equals(Object obj) | 同左 | 同左 | 同左 | 同左 | 同左 |
遍历-key构成Set集合 | for (String key : map.keySet()) {System.out.println("key=" + key);} |
同左 | 同左 | 同左 | 同左 | 同左 |
遍历-value构成Collection集合 | for (String value : map.values()) {System.out.println("value=" + value);} |
同左 | 同左 | 同左 | 同左 | 同左 |
遍历-key-value对构成Set集合 | for (String key : map.keySet()) {System.out.println("key=" + key+" value="+map.get(key));} |
同左 | 同左 | 同左 | 同左 | 同左 |
遍历-key-value-iterator | Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();while (iterator.hasNext()) {Map.Entry<String, String> entry = iterator.next();System.out.println("key=" + entry.getKey() + " value=" + entry.getValue());} |
同左 | 同左 | 同左 | 同左 | 同左 |
遍历-不用泛型 | Iterator iterator1 = map.entrySet().iterator();while (iterator1.hasNext()) {Map.Entry entry1 = (Map.Entry) iterator1.next();System.out.println("key=" + entry1.getKey() + " value=" + entry1.getValue());} |
同左 | 同左 | 同左 | 同左 | 同左 |
排序 | 实现排序遍历,自然排序、定制排序 | |||||
扩容 | ||||||
线程 | 未实现同步,线程不安全 | 实现了同步,线程安全 | ||||
Jdk7 | 实例化以后,底层创建了长度是16的一维数组Entry[] table | |||||
Jdk8 | Node[],put()后创建了长度是16 |