HashMap 的实例有两个参数影响其性能:“初始容量” 和 “加载因子”。
HashMap 的实现不是同步的,意味着它不是线程安全的
HashMap通过开放地址法解决哈希冲突
HashMap中的key-value都是存储在Entry数组中的
1. 开放定址法:线性探测再散列、二次探测再散列、再随机探测再散列;
2. 再哈希法:换一种哈希函数;
3. 链地址法 :在数组中冲突元素后面拉一条链路,存储重复的元素;
4. 建立一个公共溢出区:其实就是建立一个表,存放那些冲突的元素。
什么时候会产生冲突
HashMap中调用 hashCode() 方法来计算hashCode。
一,优缺点:
1.开放地址法:容易产生堆积问题;不适于大规模的数据存储;散列函数的设计对冲突会有很大的影响;插入时可能会出现多次冲突的现象,删除的元素是多个冲突元素中的一个,需要对后面的元素作处理,实现较复杂;结点规模很大时会浪费很多空间;
2.链地址法:处理冲突简单,且无堆积现象,平均查找长度短;链表中的结点是动态申请的,适合构造表不能确定长度的情况;相对而言,拉链法的指针域可以 忽略不计,因此较开放地址法更加节省空间。插入结点应该在链首,删除结点比较方便,只需调整指针而不需要对其他冲突元素作调整。
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题