LinkedHashMap LIFO还是FIFO?
2022-09-04 08:19:17
LinkedHashMap LIFO还是FIFO?如果我的地图的格式为:
map.put(1,"one");
map.put(2,"two");
如果我使用键集在地图上迭代,顺序会是什么?
编辑:我想我实际上混淆了两个不同的概念。让我重新表述这个问题。使用条目集遇到数量的顺序是什么?感谢您指出这一点顺便说一句。我不打算删除任何条目。
LinkedHashMap LIFO还是FIFO?如果我的地图的格式为:
map.put(1,"one");
map.put(2,"two");
如果我使用键集在地图上迭代,顺序会是什么?
编辑:我想我实际上混淆了两个不同的概念。让我重新表述这个问题。使用条目集遇到数量的顺序是什么?感谢您指出这一点顺便说一句。我不打算删除任何条目。
在链接的哈希映射中,支持双链接列表中的元素被添加到末尾(显然:为了保持迭代顺序),但是当元素从映射中删除时,可以从列表中的任何部分删除,将支持列表(以及扩展:映射)标记为LIFO或FIFO是不正确的, 两者都不是 - 映射中没有删除顺序的概念,因此不能假设链接哈希映射中后备列表的删除顺序。
链接的哈希映射所保证的是,迭代其内容(无论是:键还是条目)将以与元素插入映射相同的顺序发生;从文档中:
此实现与HashMap的不同之处在于,它维护一个贯穿其所有条目的双链表。此链表定义迭代顺序,这通常是将键插入到映射中的顺序(插入顺序)。
编辑:
关于对问题的上次编辑,a 保证 的迭代顺序与插入元素的顺序相同:对于问题中的示例。这与FIFO / LIFO无关,这些概念涉及从数据结构中删除元素的顺序,并且它们与插入元素后的迭代顺序无关。LinkedHashMap
keySet()
1, 2
LinkedHashMap引用自javadocs是“Hash表和Linked list实现Map接口,具有可预测的迭代顺序”。因此,keySet 将根据插入顺序返回密钥,实质上是 FIFO。