java基础之HashMap(jdk1.7)中的put()操作,源码分析

1.HashMap允许key和value都为空,HashMap是线程不安全的。HashTable中的key和value都不能为空。HashTable是线程安全的。

2.HashMap中桶的概念:在jdk1.7中,HashMap是由数组和链表组成的。数组的每个索引被称作桶。

3.为什么在jdk1.7中,HashMap是由数组和链表组成的?

4.如果散列函数将元素均匀的分布在桶中,如:put和get方法的时间复杂度为常量。对hashMap迭代的时间为桶的数量+键值对的数量。

5.影响HashMap性能的两个因素:初始容量和负载因子。容量就是哈希表中桶的数量。初始容量就是哈希表创建时的容量。负载因子就是描述扩容前的最大存储量的程度。比如初始容量16和负载因子0.75,当数组的元素超过16*0.75=12时,就要进行扩容操作。哈希表容量时原来的2倍。哈希表会重新hash。重新hash的意思就是重新计算存储数据的存储位置。

6.负载因子默认是0.75,0.75是时间和空间的一个折中,是统计出来的结果。如果高于0.75,降低了空间开销,但是增加了查询的开销。

7.HashMap不是同步的。所以当多个线程访问同一个HashMap时,至少有一个现在对HashMap做了结构性的修改,在外部就要进行同步。有一种方法是在创建HashMap对象的时候,同步——Map m = Collections.synchronizedMap(new HashMap(...))。(结构性修改是指添加或者删除多个映射。如果仅仅改变vaule值,不改变key值,这种情况不是结构性修改。)

8.如果获得一个集合类的迭代器后,再在集合类本身做一些结构性的修改,比如remove操作,则会报ConcurrentModificationException异常。解决办法:通过迭代器进行结构性的修改,而不是通过集合类本身。在并发修改的情况下,迭代器会快速地失败。

以上是在HashMap的类注释中获得的信息。


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值