LinkedHashMap LIFO还是FIFO?

Bla*_*lah 12 java fifo linkedhashmap data-structures

LinkedHashMap是LIFO还是FIFO的性质?如果我的地图是形式 - >

map.put(1,"one");
map.put(2,"two");
Run Code Online (Sandbox Code Playgroud)

如果我要使用keyset在地图上迭代,那将是什么命令?

编辑:我认为我确实混淆了两个不同的概念.我重新解释了这个问题.我使用entryset遇到数量的顺序是什么?感谢指出btw.i donot打算删除任何条目.

Ósc*_*pez 13

在链接的哈希映射中,后端双向链表中的元素在末尾添加(显然:用于保留迭代顺序),但是当元素从地图中删除时,可以从列表中的任何部分中删除它,这是不正确的将后备列表(以及扩展名:地图)标记为LIFO或FIFO,它既不是 - 在映射中没有删除顺序的概念,因此不能为链接的哈希映射中的后备列表假定删除顺序.

链接散列映射确实保证迭代其内容(无论是:键还是条目)将按照在映射中插入元素的相同顺序进行; 从文件:

此实现与HashMap的不同之处在于它维护了一个贯穿其所有条目的双向链表.此链接列表定义迭代排序,通常是键插入映射的顺序(插入顺序).

编辑:

关于问题的最后一次编辑,LinkedHashMap 保证迭代顺序与keySet()插入元素的顺序相同:1, 2对于问题中的示例.这与FIFO/LIFO无关,这些概念处理从数据结构中删除元素的顺序,并且在插入元素后它们与迭代顺序无关.


Bij*_*men 5

引用javadocs的 LinkedHashMap 是"Map接口的哈希表和链表实现,具有可预测的迭代顺序".因此keySet将根据插入顺序返回键,基本上是FIFO.