java – 为什么linkedhashmap维持双向链接列表的迭代
因为在任何线程中没有内部和合理的解释.
请给我确切的理由. >对于插入顺序,它足以维护单链接列表,但为什么不呢? 解决方法
你是对的,你只需要维护一个单链表来跟踪插入顺序.但是为了有效地维护单链表,您实际上需要一个双向链表.
考虑三个条目顺序 A ---> B ---> C 假设你删除B.显然A现在应该指向C.但除非你知道B之前的条目,否则你无法有效地说明哪个条目应该指向C.要解决这个问题,你需要输入两个方向. ---> ---> A B C <--- <--- 这样,当您删除B时,您只需查看B(A和C)之前和之后的条目并进行更新,以便A和C指向对方. LinkedHashMap维护插入顺序的原因,而HashMap没有,尽管除了4个方法之外,除了4个方法之外,它是非常聪明的.大多数实现特定的操作是HashMap.Entry的成员,而不是HashMap. LinkedHashMap有一个私有的静态类LinkedHashMap.Entry,它扩展了HashMap的静态类HashMap.Entry.当您调用put或remove时,例如,LinkedHashMap的代码可以与HashMap的代码相同,因为它是条目本身跟踪信息之前和之后.作为一个例子,下面是我上面解释的LinkedHashMap.Entry.remove()的完整代码 private void remove() { before.after = after; after.before = before; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |