我了解在HashMap中,条目(键,值)基于hash(Key.hashCode)->表示存储桶位置的索引放置在存储桶中。如果某个条目已经放置在该位置,则会创建一个链表,并将新条目(如果它具有不同的键->通过equals()方法)放置在链表的开头。
值区是地图阵列中的单个插槽。这是两个相同的HashMap
和ConcurrentHashMap
。从概念上讲,后者将其数组分为多个段(每个段是一个引用数组),仅此而已。请注意,Java 8中的CHM不再具有段,而全都是单个数组。
是的,这就是所谓的 分段锁定 方案。它减少了线程间争用,但并没有消除它。
hashmap和hashtable在理论上有区别吗? 我不是指Java(或实现)中给出的具体定义,而是理论上的。哈希表不是使用哈希的地图吗...因此是hashmap?
问题内容: 在的实现细节中,我可以阅读: 如果我有恒常的能力,而我的班级没有实现,它将如何打破束缚以及如何构造树呢? 我的意思是- 铲斗会变成一棵树,并会打断领带。然后,我将尝试使用其他实例(具有和)相同的实例来调用方法,它将具有不同的实例,因此是否有可能树被错误的节点遍历(向左而不是向右)并且找不到键? 我是否缺少某些东西,或者这是正常现象? 问题答案: 存储桶将在插入期间使用,但查找仅使用哈希
问题内容: 我有一个地图,该地图将同时被多个线程修改。 Java API中似乎有三种不同的同步Map实现: Hashtable Collections.synchronizedMap(Map) ConcurrentHashMap 据我了解,这是一个旧的实现(扩展了过时的类),后来对其进行了修改以适合该Map接口。虽然它是同步的,但似乎存在严重的可伸缩性问题,因此不建议用于新项目。 但是其他两个呢?
问题内容: 我开始学习Java。什么时候可以在TreeMap上使用HashMap? 问题答案: 是一个的示例,这意味着可以对键的顺序进行排序,并且在对键进行迭代时,可以期望它们会按顺序排列。 另一方面,不作任何保证。因此,当遍历a的键时,您无法确定它们将以什么顺序排列。 一般而言,它会更有效,因此只要您不关心键的顺序,都可以使用它。
问题内容: 我看到了许多有关多图的示例,但不明白为什么Google Gauva与众不同? 两者在保存数据方面是相同的还是不同的? 问题答案: A 将类型A的键与类型的值相关联(因此名称为MultiMap) A 将类型A的键与类型B的值关联。 因此,可以将a视为。通过阅读api文档,这应该显而易见。
问题内容: ava中的aHashMap和a有什么区别Hashtable? 对于非线程应用程序,哪个更有效? 问题答案: 和在Java中有一些区别: 是同步的,而HashMap不是。这HashMap对于非线程应用程序更好,因为非同步对象的性能通常优于同步对象。 不允许null键或值。 HashMap允许一个null键和任意数量的null值。 的子类之一是LinkedHashMap,因此,如果您想要可