因为任何线程都没有内部合理的解释。
请给我确切的理由。
对于插入顺序,用单链表维护就足够了,但为什么不呢?
在这种情况下,双向链表如何提高性能?
所有方法都是从 hashmap xpt 4 方法继承的,那么 hashmap 的迭代器不维护顺序,而 linkedhashmap 维护顺序?
你是对的,你只需要维护一个单链表来跟踪插入顺序。但为了有效地维护单链表,实际上需要一个双向链表。
按顺序考虑三个条目
A ---> B ---> C
假设您删除B
。明显地A
现在应该指向C
。但除非你之前知道该条目B
您无法有效地说出现在应该指向哪个条目C
。要解决此问题,您需要条目指向两个方向。
---> --->
A B C
<--- <---
这样,当您删除B
你可以只看之前和之后的条目B
(A
and C
)并更新,以便A
and C
互相指指点点。
原因LinkedHashMap
保持插入顺序,同时HashMap
尽管事实上除了 4 个方法之外的所有方法都是继承的,但它的编写非常巧妙。大多数特定于实现的操作都是以下成员HashMap.Entry
, not HashMap
. LinkedHashMap
has a private static
class LinkedHashMap.Entry
这扩展了static
class HashMap.Entry
of HashMap
。你打电话时put
or remove
,例如,代码为LinkedHashMap
可以与以下代码相同HashMap
因为它是条目本身跟踪之前和之后的信息。作为示例,以下是完整代码LinkedHashMap.Entry.remove()
我在上面解释过
private void remove() {
before.after = after;
after.before = before;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)