我无法理解 LinkedHashMap
中 HashFunction 的使用。
在HashMap实现中,hashFunction的使用是为了找到内部数组的索引,这是合理的,遵循hashfunction契约(相同key 必须具有相同的 hashcode,但不同的 key 可以具有相同的 hashcode)。
我的问题是:
1)LinkedHashMap
中的hashfunction有什么用?
2) LinkedHashMap 的 put 和 get 方法如何工作?
3)为什么它在内部维护双向链表?
使用HashMap
作为内部实现(就像HashSet
)并维护Entry索引的单独Array/List有什么问题数组按插入顺序排列?
感谢有用的回复和引用。
最佳答案
1) LinkedHashMap 扩展了 HashMap,因此哈希函数与 HashMap 相同(如果您检查代码,哈希函数是从 HashMap 继承的),即该函数计算插入的对象的哈希并用于存储在数据中结构与具有相同 key 哈希的元素一起; hasfunction 在 get 方法中使用指定为参数的键来检索对象。
2)Put 和 Get 方法的行为方式与 HashMap 相同,加上跟踪元素的插入顺序,因此当您迭代键集时,您会按照插入到映射中的顺序获取键值(请参阅 here更多详情)
3)LinkedHashMap使用双链表而不是数组,因为它更紧凑;双链表是插入和删除项目的列表最有效的数据结构;如果您主要插入/追加元素,那么基于数组的实现可能会更好。由于映射语义是一个键值实现,并且从映射中删除元素可能是一个频繁的操作,因此双链表更适合。内部实现可以使用 LinkedList 来完成,但我的观点是使用低级数据结构更有效,并将 LinkedHashMap 与其他类解耦。
关于java - LinkedHashMap的Java实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29642805/