牛客605421456号
牛客605421456号
全部文章
集合类
Java基础(49)
算法(1)
面试主观题(1)
面试题_Java开发工程师(6)
归档
标签
去牛客网
登录
/
注册
牛客605421456号的博客
全部文章
/ 集合类
(共24篇)
ConcurrentHashMap是怎么分段分组的?
get操作: Segment的get操作实现非常简单和高效,先经过一次再散列,然后使用这个散列值通过散列运算定位到 Segment,再通过散列算法定位到元素。get操作的高效之处在于整个get过程都不需要加锁,除非读到空的值才会加锁重读。原因就是将使用的共享变量定义成 volatile 类型。 pu...
Java
2022-04-29
0
532
介绍一下ConcurrentHashMap是怎么实现的?
JDK 1.7中的实现: 在 jdk 1.7 中,ConcurrentHashMap 是由 Segment 数据结构和 HashEntry 数组结构构成,采取分段锁来保证安全性。Segment 是 ReentrantLock 重入锁,在 ConcurrentHashMap 中扮演锁的角色,HashE...
Java
2022-04-28
0
350
HashMap与ConcurrentHashMap有什么区别?
HashMap是非线程安全的,这意味着不应该在多线程中对这些Map进行修改操作,否则会产生数据不一致的问题,甚至还会因为并发插入元素而导致链表成环,这样在查找时就会发生死循环,影响到整个应用程序。 Collections工具类可以将一个Map转换成线程安全的实现,其实也就是通过一个包装类,然后把所有...
Java
2022-04-28
0
260
说一说HashMap和HashTable的区别?
Hashtable是一个线程安全的Map实现,但HashMap是线程不安全的实现,所以HashMap比Hashtable的性能高一点。 Hashtable不允许使用null作为key和value,如果试图把null值放进Hashtable中,将会引发空指针异常,但HashMap可以使用null作...
Java
2022-04-27
0
234
HashMap为什么用红黑树而不用B树?
B/B+树多用于外存上时,B/B+也被成为一个磁盘友好的数据结构。 HashMap本来是数组+链表的形式,链表由于其查找慢的特点,所以需要被查找效率更高的树结构来替换。如果用B/B+树的话,在数据量不是很多的情况下,数据都会“挤在”一个结点里面,这个时候遍历效率就退化成了链表。
Java
2022-04-26
1
1749
HashMap中的循环链表是如何产生的?
在多线程的情况下,当重新调整HashMap大小的时候,就会存在条件竞争,因为如果两个线程都发现HashMap需要重新调整大小了,它们会同时试着调整大小。在调整大小的过程中,存储在链表中的元素的次序会反过来,因为移动到新的bucket位置的时候,HashMap并不会将元素放在链表的尾部,而是放在头部,...
Java
2022-04-26
0
422
介绍一下HashMap的扩容机制?
数组的初始容量为16,而容量是以2的次方扩充的,一是为了提高性能使用足够大的数组,二是为了能使用位运算代替取模预算(据说提升了5~8倍)。 数组是否需要扩充是通过负载因子判断的,如果当前元素个数为数组容量的0.75时,就会扩充数组。这个0.75就是默认的负载因子,可由构造器传入。我们也可以设置大...
Java
2022-04-26
0
270
介绍一下HashMap底层的实现原理?
它基于hash算法,通过put方法和get方法存储和获取对象。 存储对象时,我们将K/V传给put方法时,它调用K的hashCode计算hash从而得到bucket位置,进一步存储,HashMap会根据当前bucket的占用情况自动调整容量(超过Load Facotr则resize为原来的2倍)。获...
Java
2022-04-26
0
353
JDK7和JDK8中的HashMap有什么区别?
JDK7中的HashMap,是基于数组+链表来实现的,它的底层维护一个Entry数组。它会根据计算的hashCode将对应的KV键值对存储到该数组中,一旦发生hashCode冲突,那么就会将该KV键值对放到对应的已有元素的后面, 此时便形成了一个链表式的存储结构。 JDK7中HashMap的实现方案...
Java
2022-04-25
0
333
如何得到一个线程安全的Map?
使用Collections工具类,将线程不安全的Map包装成线程安全的Map; 使用java.util.concurrent包下的Map,如ConcurrentHashMap; 不建议使用Hashtable,虽然Hashtable是线程安全的,但是性能较差。
Java
2022-04-25
0
388
首页
上一页
1
2
3
下一页
末页