HashMap两个参数影响性能

1. HashMap:

   是AbstractMap的直接子类,实现Map接口,允许NULL键值(Key-Value),非同步的。在这两点与HashTable不同。

   HashMap有两个参数会影响其性能,初始容量和加载因子,容量是HashMap在创建时“桶”的数量,而初始容量是哈希表在创建时分配的空间大小。加载因子是哈希表在其容量自动增加时能达到多满的衡量尺度(比如默认为0.75,即桶中数据达到3/4就不能再放数据了)。如果加载因子过大,迭代性能会下降,虽然空间开销减少。如果初始容量小于最大条目数除以加载因子,则会发生 rehash 操作。rehash操作即重建内部数据结构,一般是增加桶数为原来的两倍。

   如果有很多K-V对要添加到HashMap中,则最好分配大点的初始容量,以减少rehash操作。

   HashMap是非同步的,所以如果多个线程同时访问一个哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须保持外部同步。(结构上的修改是指添加或删除一个或多个映射关系的任何操作;仅改变与实例已经包含的键关联的值不是结构上的修改。)这一般通过对自然封装该映射的对象进行同步操作来完成。如果不存在这样的对象,则应该使用 Collections.synchronizedMap(new HashMap(..)); 方法来“包装”该映射。最好在创建时完成这一操作,以防止对映射进行意外的非同步访问,如下所示:

   Map m = Collections.synchronizedMap(new HashMap(...));

   1.1 构造函数如下:

   HashMap()

          构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空HashMap。 

   HashMap(int initialCapacity)

          构造一个带指定初始容量和默认加载因子 (0.75) 的空HashMap。 

   HashMap(int initialCapacity, float loadFactor)

          构造一个带指定初始容量和加载因子的空HashMap。

   1.2  主要方法有:clear()、containsKey(Object key)、containsValue(Object value)、entrySet()(返回包含的映射关系的Set视图,即Set<Map.Entry<K,V>>)、keySet()(返回包含的所有key的Set视图)、values()(返回包含的所有value的Set视图)、size()、isEmpty()、put(K,V)、get(Object key)、remove(Object key)


2. HashTable:

   是Dictionary(抽象类)的直接子类,也实现了Map接口。任何非NULL对象都可以作为键值对。HashTable是同步的,其他与HashMap一模一样。

 

3. Dictionary:

   ~是可作为任何包含K-V映射关系的类的抽象父类,K、V都不能为NULL

 

4. Enumeration:

   接口,功能与Iterator接口基本相同,优先考虑使用Iterator。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值