1

我想做的是:

for (Entry<Foo, Foo> myEntry : myMap.entryList())
{
    if (someCondition(myEntry.getKey()))
    {
        doSomething(myEntry.getValue())
    }
}

顺序很重要,因为 myEntry.getValue() 将指向稍后将到达的键。是否有一个 Map 实现可以保证条目的顺序并允许我按该顺序遍历条目?我找到了 SortedMap,但它看起来像 SortedMaps 对键进行排序。这不是我所需要的。我只是想按照我放入它们的相同顺序将我的条目从我的地图中取出。

对于那些想知道我要做什么的人,myMap 表示 Foo 对象的层次结构。当在“someCondition”中满足条件时,我标记 Foo 的父级(恰好是条目的值)。稍后当父母成为钥匙时,我会知道我之前已经标记过它并会采取相应的行动。现在我已经创建了一个递归的“markParent”调用,但是如果我可以以已知的顺序遍历地图,我就不需要这样做了。

4

2 回答 2

7

你的意思是像LinkedHashMap?;-)

接口的哈希表和链表实现Map具有可预测的迭代顺序。此实现的不同之处HashMap在于它维护一个贯穿其所有条目的双向链表。这个链表定义了迭代顺序,通常是键插入映射的顺序(插入顺序)。请注意,如果将键重新插入到地图中,则插入顺序不会受到影响。(如果调用 when将在调用之前立即返回 true ,则将键k重新插入映射中。)mm.put(k, v)m.containsKey(k)

(我的重点)

FWIW,我是如何到达那里的,如果您将来需要找到类似的信息,可以提供帮助:我模糊记得其中一个 JDK 类是这样做的,所以去Map阅读“已知实现类”列表。在这种情况下,我一看到它就知道它的名字,但我想即使我不知道它,也LinkedHashMap建议订购,所以...... :-)

于 2013-03-12T18:59:03.003 回答
0

LinkedHashMap 将维护内部使用 LinkedList 的插入顺序。如果你想定义任何自定义顺序,你可以使用像 TreeMap 这样的 SortedMap。

于 2019-06-06T03:23:40.393 回答