java集合Map
常用的子类
一、介绍
Map
是保存偶对象的集合,也就是以(key = value
)键值对的形式保存的,这样就可以根据 key
获取 value
。collection
接口保存数据的主要目的是输出,而 Map
保存数据的目的是实现 key
查找 value
的字典功能。虽然 Map
也可以进行输出操作,但是这样操作在开发中使用不多。
常用的Map
子类有 HashMap
、Hashtable
、concurrentHashMap
、TreeMap
、 IdentityHashMap
,LinkedHashMap
。
二、Map
接口常用的方法
编号 | 方法名称 | 描述 |
---|---|---|
1 | V put(K key, V value); | 向集合中保存数据 |
2 | V get(Object key); | 根据 key 查找对应的value数据 |
3 | Set<Map.Entry<K, V>> entrySet(); | 将 map 集合转换为 Set 集合 |
4 | Set<K> keySet(); | 取出全部 key |
二、HashMap
- 定义
public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable {}
HashMap
特点
使用 HashMap
定义的 Map
集合是无序存放的。
如果发现重复的 key
会将新的数据替换掉已有的数据。
使用 HashMap
子类保存数据时,key
或 value
可以保存为null
。
HashMap
是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent
并发包下的concurrentHashMap
。
三、Hashtable
- 定义
public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, java.io.Serializable {}
Hashtable
和 HashMap
很相似,不同之处是 Hashtable
线程是安全的,key
不允许设置为 null
。
四、TreeMap
- 定义
public class TreeMap<K,V>
extends AbstractMap<K,V>
implements NavigableMap<K,V>, Cloneable, java.io.Serializable{}
- 特点
可以排序的Map集合,按集合中的key排序,key不允许重复 。
最终保存在Map中的数据是经过排序的数据,按其key排序
五、 IdentityHashMap
- 定义
public class IdentityHashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, java.io.Serializable, Cloneable{}
IdentityHashMap
集合允许key
值重复
- 范例
public static void main(String[] args) {
Map<String,Object> map =new IdentityHashMap<String,Object>();
map.put(new String("xx"),"first");
map.put(new String("xx"),"second");
System.out.println(map);
for (Map.Entry<String, Object> entry : map.entrySet()) {
System.out.print(entry.getKey() +" ");
System.out.println(entry.getValue());
}
System.out.println("idenMap="+map.containsKey("xx"));
System.out.println("idenMap="+map.get("xx"));
}
输出结果
{xx=second, xx=first}
xx second
xx first
idenMap=false
idenMap=null
六、LinkedHashMap
- 定义
public class LinkedHashMap<K,V>
extends HashMap<K,V>
implements Map<K,V>{}
LinkedHashMap
是HashMap
的一个子类,保存了记录的插入顺序,因此在遍历的时候会比HashMap
效率要低。
不过也有例外情况,当HashMap
容量很大,实际存储的数据较少时,遍历起来可能会比LinkedHashMap
要慢,因
为LinkedHashMap
的遍历速度只和实际数据有关,和容量无关,而HashMap
的遍历速度和他的容量有关。
HashMap
和LinkedHashMap
使用场景
一般情况下,在Map
中插入、删除和定位元素,HashMap
是最好的选择。如果需要元素输出的顺序和输入的相
同,就需要选择LinkedHashMap
了。