Java ConcurrentHashMap的段和HashMap的桶理论上有什么区别?
我知道在HashMap中,条目(Key,Value)是基于hash(Key.hashCode)-->表示bucket位置的索引放置在bucket中的。如果某个条目已放置在该位置,则会创建一个链表,并将新条目(如果它具有不同的键-->通过equals()方法)放置在链表的开头Java ConcurrentHashMap的段和HashMap的桶理论上有什么区别?,java,collections,hashmap,concurrenthashmap,Java,Collections,Hashmap,Concurrenthashmap,我知道在HashMap中,条目(Key,Value)是基于hash(Key.hashCode)-->表示bucket位置的索引放置在bucket中的。如果某个条目已放置在该位置,则会创建一个链表,并将新条目(如果它具有不同的键-->通过equals()方法)放置在链表的开头 我可以将这个概念与ConcurrentHashMap的概念联系起来吗?但是,除了bucket之外,还有一些段,每个线程都有一个锁。这里没有条目,而是HashEntry。以类似的方式,将创建一个链表,如果插入的键值对不同,则基
HashMap
和ConcurrentHashMap
都是一样的。从概念上讲,后者将其数组分为多个段(每个段都是一个引用数组),但仅此而已。注意,Java8中的CHM不再有段,而是一个数组这可能对pt有帮助。1在您的回答中:这是否意味着CHM中的桶也被划分?在这些段下有HashEntry链表?不能分割存储桶,它们是链表。一个段是一个bucket数组,每个map实例只有多个。但是我在代码中看到的结构是这样的:CHM有一个段的实例,segment有一个HashEntry实例,bucket在哪里出现在图片中我猜你看到错了,这两个都是数组。和段=HashEntry的数组。一个HashEntry=一个bucket。这是否清晰了你的视野?