LinkedHashMap的remove()操作是否会改变迭代顺序?
LinkedHashMap的remove(key)操作不会改变剩余元素的迭代顺序
直接给结论:LinkedHashMap执行remove(key)后,剩余元素的迭代顺序和删除前完全一致,只会移除目标元素,不会打乱原有顺序。
原因可以从它的底层实现逻辑拆解:
LinkedHashMap在HashMap的基础上额外维护了一条双向链表,迭代顺序完全由这条链表的节点顺序决定,和哈希表的桶结构没有直接关联。- 执行
remove(key)时,操作逻辑和LinkedList删除节点类似:找到目标元素对应的链表节点,将其前驱节点指向后继节点,后继节点再指向前驱节点,把目标节点从链表中剥离即可。整个过程不会移动其他任何节点在链表中的位置。 - 哪怕触发了重哈希(比如扩容),双向链表的顺序也会完整保留。重哈希只是调整元素在哈希桶中的存储位置,不会改动双向链表的节点连接关系,所以迭代顺序不受影响。
你自己做的小型测试是准确的,LinkedHashMap的规范本身就保证了:除了被移除的元素消失,剩余元素的插入顺序会一直维持。
如果你需要的是保留插入顺序+高效查找/删除的数据结构,LinkedHashMap完全符合需求——它继承了HashMap的O(1)平均查找、删除性能,同时通过双向链表保证了插入顺序的迭代能力。
内容的提问来源于stack exchange,提问作者Funny
相关产品推荐
相关产品推荐

