jdk1.7哈希值的结构
时间: 2023-09-16 21:09:42 浏览: 34
在 JDK 1.7 中,哈希表的结构是由数组和链表共同组成的,称为“链表散列”。具体来说,每个位置上的元素是一个链表,如果有多个元素的哈希值相同,它们会被放在同一个链表中。当链表的长度超过一定阈值(默认为8),链表就会被转换成红黑树,以提高查询效率。这种结构的好处是在哈希冲突较少的情况下,查询效率高,而且在哈希冲突较多的情况下,仍然能够保持较高的查询效率。
相关问题
jdk1.7的hashmap的hash算法
JDK1.7的HashMap使用的是基于拉链法的哈希表实现,其哈希算法的具体实现如下:
1. 首先,将键值对中的key通过hashCode()方法得到一个32位的哈希值h。
2. 然后,将h与数组长度-1进行位与运算,得到的结果即为数组中的索引位置i。
3. 如果此索引位置i上没有元素,则将该键值对放入这个位置上。
4. 如果此索引位置i上已经有元素,则遍历该位置上的链表。如果链表中已经有相同的键值对,则将该键值对的value值更新,否则将该键值对添加到链表末尾。
需要注意的是,在JDK1.7的HashMap中,当链表长度达到8时,就会将链表转化为红黑树,以提高插入、查找等操作的效率。
jdk1.8相比于jdk1.7ConcurrentHashMap有什么变化?
在JDK1.8中,ConcurrentHashMap有以下变化:
1. 实现方式:JDK1.7中,ConcurrentHashMap使用分段锁实现并发更新,而在JDK1.8中,ConcurrentHashMap采用了CAS操作和synchronized来实现并发更新,提高了并发性能。
2. 数据结构:JDK1.8中,ConcurrentHashMap的数据结构由分段数组变为了数组+链表+红黑树的结构,这种结构提高了查找、插入和删除操作的效率。
3. 存储方式:JDK1.8中,ConcurrentHashMap的存储方式由按照哈希值分段存储变为了一种类似线性探测的方式,这种方式避免了分段带来的一些问题。
4. 新增方法:JDK1.8中,ConcurrentHashMap新增了一些方法,如forEach、reduce、search等方法,方便了对ConcurrentHashMap的遍历和操作。