如何解决在发生哈希冲突的情况下,LinkedHashMap如何维护插入顺序?
我知道HashMap
的工作方式,并且在发生哈希冲突的情况下,它会在该存储桶中形成一个链表。
我在LinkedHashMap
中得到它通过'before'和'after'字段维护插入顺序,但是如果像HashMap中那样存在哈希冲突,它将如何维护插入顺序。
更具体地说,可以在不同的时间间隔插入数组和任何特定存储桶中的值,并且在检索它们时,会不会一团糟?
解决方法
LinkedHashmap
维护一个贯穿其所有条目的双向链接列表。这意味着每个条目都知道在其自身之前和之后插入的条目。因此,条目属于哪个bucket并不重要;迭代时,您将按插入顺序获得条目。
我确定您知道Map
的概念,它存储由键值对组成的条目。但是,在your comment中,您仅错误地提及了值。
每个条目由之前和之后的条目对象组成。即使在哈希冲突的情况下,Collided Entry 也会有它之前的 Entry。 JVM 不需要通过linkedList 的索引或特定的bucket 进行遍历。使用after或before Entry会直接跳转。
static class Entry<K,V> extends HashMap.Node<K,V> {
Entry<K,V> before,after;
Entry(int hash,K key,V value,Node<K,V> next) {
super(hash,key,value,next);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。