1集合-HashMap

HashMap

Hash Table实现了Map接口。HashMap提供了所有可选的map操作,并且允许key或者value为null;(HashMap与HashTable相差不多,除了HashMap是不同步的与运行null值)。HashMap不能保证map中的顺序;尤其是不能保证某固定时间段内的顺序。

如果hash函数将元素正确的分散在hash桶内,那么hashMap里的基本的操作(get和put)将具有同等的时间效能。集合视图的便利花费的时间需要与HashMap的容量成正比,容量是HashMap的实例(桶数)加大小(key-value的映射数)。因此如果迭代器的性能很重要,那么设置一个不太高的初始容量(或者不太低的负载因子)是很关键的。

HashMap的实例有两个参数去影响它的性能:初始容量和负载因子。容量是哈希表中的桶的数量,初始容量只是创建哈希表中的容量。负载因子是描述当哈希表多满的时候运行其扩展其容量。当哈希表中的条目数大于了负载因子与容量的乘积,哈希表会重新散列,以便于哈希表有是之前的两倍的桶容量。

通常而言,默认的负载因子(0.75)在时间和空间的花费上是个不错的选择。更高的值求降低空间开销,但是会增加查找的成本(反应在大部分的操作上包括get和put)。为了进行最少的重新散列的操作,当设置初始容量的时候,应该烤炉与预计放入的数量与负载应酬这两个数字。如果初始容量比最大条目数除以负载因子大。那么不会发生重新散列的操作。

如果有大量的的映射将被存在HashMap的实例中,那么存入一个具有足够大容量的map中将比让其自动重新散列效率要高。注意使用大量具有相同hashCode的keys时将会当日任何哈希表的效率变慢。为了改善影响,当key时可以比较的,HashTable可能使用key的比较顺序来打破联系。

注意:HashMap是不同步的。如果多个线程同时访问一个HashMap,并且至少一个线程修改了map的结构,那么必须在HashMap外做同步操作。(修改结构是任何增加删除一个或多个映射的操作;仅仅是修改一个早已包含的的key对value的映射是不算修改结构的。)通常通过同步一些被自然封装在map里的对象来实现。如果没有这样的对象存在,那么map应该被包装的使用Collections.synchronizedMap方法。最好在创建时完成,以避免意外的不同步的访问map
Map m = Collections.synchronizedMap(new HashMap(…));

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值