预览加载中,请您耐心等待几秒...
1/5
2/5
3/5
4/5
5/5

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

java各个Map的区别 ConcurrentHashMap支持检索的完全并发和更新的所期望可调整并发的哈希表。(线程安全)此类遵守与Hashtable相同的功能规范,并且包括对应于Hashtable的每个方法的方法版本。不过,尽管所有操作都是线程安全的,但检索操作不必锁定,并且不支持以某种防止所有访问的方式锁定整个表。此类可以通过程序完全与Hashtable进行互操作,这取决于其线程安全,而与其同步细节无关。检索操作(包括get)通常不会受阻塞,因此,可能与更新操作交迭(包括put和remove)。检索会影响最近完成的更新操作的结果。对于一些聚合操作,比如putAll和clear,并发检索可能只影响某些条目的插入和移除。类似地,在创建迭代器/枚举时或自此之后,Iterators和Enumerations返回在某一时间点上影响哈希表状态的元素。它们不会抛出ConcurrentModificationException。不过,迭代器被设计成每次仅由一个线程使用。这允许通过可选的concurrencyLevel构造方法参数(默认值为16)来引导更新操作之间的并发,该参数用作内部调整大小的一个提示。表是在内部进行分区的,试图允许指示无争用并发更新的数量。因为哈希表中的位置基本上是随意的,所以实际的并发将各不相同。理想情况下,应该选择一个尽可能多地容纳并发修改该表的线程的值。使用一个比所需要的值高很多的值可能会浪费空间和时间,而使用一个显然低很多的值可能导致线程争用。对数量级估计过高或估计过低通常都会带来非常显著的影响。当仅有一个线程将执行修改操作,而其他所有线程都只是执行读取操作时,才认为某个值是合适的。此外,重新调整此类或其他任何种类哈希表的大小都是一个相对较慢的操作,因此,在可能的时候,提供构造方法中期望表大小的估计值是一个好主意。(开始构造函数到时候必须考虑到他们的容量和因子)对于经常迭代时更重要此类及其视图和迭代器实现了Map和Iterator接口的所有可选方法。此类与Hashtable相似,但与HashMap不同,它“不”允许将null用作键或值。此类是JavaCollectionsFramework的成员。EnumMap与枚举类型键一起使用的专用Map实现。枚举映射中所有键都必须来自单个枚举类型,该枚举类型在创建映射时显式或隐式地指定。枚举映射在内部表示为数组。此表示形式非常紧凑且高效。枚举映射根据其键的自然顺序来维护(该顺序是声明枚举常量的顺序)。在集合视图(keySet()、entrySet()和values())所返回的迭代器中反映了这一点。由集合视图返回的迭代器是弱一致的:它们不会抛出ConcurrentModificationException,也不一定显示在迭代进行时发生的任何映射修改的效果。不允许使用null键。试图插入null键将抛出NullPointerException。但是,试图测试是否出现null键或移除null键将不会抛出异常。允许使用null值。像大多数集合一样,EnumMap是不同步的。(HashMap)如果多个线程同时访问一个枚举映射,并且至少有一个线程修改该映射,则此枚举映射在外部应该是同步的。这一般通过对自然封装该枚举映射的某个对象进行同步来完成。如果不存在这样的对象,则应该使用Collections.synchronizedMap(java.util.Map)方法来“包装”该枚举。最好在创建时完成这一操作,以防止意外的非同步访问:Map<EnumKey,V>m=Collections.synchronizedMap(newEnumMap(...));实现注意事项:所有基本操作都在固定时间内执行。虽然并不保证,但它们很可能比其HashMap副本更快。HashMap基于哈希表的Map接口的实现。此实现提供所有可选的映射操作,并允许使用null值和null键。(除了不同步和允许使用null之外,HashMap类与Hashtable大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。此实现假定哈希函数将元素正确分布在各桶之间,可为基本操作(get和put)提供稳定的性能。迭代集合视图所需的时间与HashMap实例的“容量”(桶的数量)及其大小(键-值映射关系数)的和成比例。所以,如果迭代性能很重要,则不要将初始容量设置得太高(或将加载因子设置得太低)。HashMap的实例有两个参数影响其性能:初始容量和加载因子。容量是哈希表中桶的数量,初始容量只是哈希表在创建时的容量。加载因子是哈希表在其容量自动增加之前可以达到多满的一种尺度。当哈希表中的条目数超出了加载因子与当前容量的乘积时,通过调用rehash方法将容量翻倍。通常,默认加载因子(.75)在时间和空间成本上寻求一种折衷。加载