文档库

最新最全的文档下载
当前位置:文档库 > Map、HashMap、Hashtable、concurenthashmap区别

Map、HashMap、Hashtable、concurenthashmap区别

选择一个map进行软件基础数据初始化操作,要求第一次初始化后,不修改数据,可能会出现静态类被回收,然后在进行初始化操作?
1.Map :接口

  一个map是由一组键和值组成的数据结构 ,其中每个键映射到一个单一的值。当Map被声明后,values的值将被作为key 的关联值被声明
Map提供帮助方法来遍历所有它的包含键值,以及各种方法来访问和更新键/值对。
ps:Map提供key、values形式的声明,public interface Map {},map是一个接口,不能直接使用。
2.hashMap

  HashMap继承了map,实现了map的所有方法。key和value允许使用全部的元素,包括null
注意遍历hashMap是随机的,如果你想定义遍历顺序,请使用LinkedHashMap。
注意:HashMap实现是不同步的。如果多个线程的一个线程访问一个实例map,修改了该map结构,使用的map需要同步。
结构上的修改是指添加或删除一个节点的操作。改变一个map的值不是结构上的变化。
通过Iterator创建并遍历hashMap时,如果使用iterator遍历map的元素,map的结构被修改时,此时可能抛ConcurrentModificationException异常,就是结构不唯一异常,(通常是遍历时节点被删除或修改操作。)
只有通过迭代器提供的remove方法允许在迭代过程中移除元素。但 这是不可能保证该机制的作用于不同步的并发修改操作的所有情况。
它应该只用于调试目的。
ps:HashMap准许key和values使用null,遍历hashMap是唯一的,结构修改不同步。
3.hashtable

  Hashtable 同步继承map,支持map的全部操作。
无论是key还是value都不可以为null。(所以使用较少)可以使用hashMap或linkedhashMap来存储key或者values的空值。
4.ConcurrentMap 接口
  一个map的附加方法,提供putIfAbsent和remove(移除)、replace(替换)方法。
内存一致性: 由于存在其他并发集合, 在一个线程将对象放入一个ConcurrentMap作为一个键或值之前,会向访问或关联的ConcurrentMap在另一个线程中去除该对象的后续。
ps:ConcurrentMap 是线程安全的,ConcurrentMap的操作都是原子操,扩展了map。
这个意思简单,直接看代码:
if (!map.containsKey(key))
return map.put(key, value);
else
return map.get(key);
如果map不包含key那么就添加这个key、values否则返回这个key的values值。不允许key为null

5.Concurenthashmap

  一个哈希表,它支持检索的完全并发和更新的所期望可调整并发。这个类遵循相同的功能规范的哈希表,并包括相应的哈希表的每个方法的方法版本。然而,即使所有操作都是线程安全的,检索操作不涉及锁定,并没有锁定整个表中,可以防止所有的接入方式的任何支持. 这个类是完全兼容的Hashtable中依赖于

免费下载Word文档免费下载: Map、HashMap、Hashtable、concurenthashmap区别

(共3页)