以相反的顺序迭代LinkedHashMap

2022-09-01 03:17:37

我有一个LinkedHashMap:

LinkedHashMap<String, RecordItemElement>

我需要从给定键的位置向后迭代。因此,如果我被赋予了第10项的密钥,我需要通过哈希映射9,8,7等向后迭代。


答案 1

这个问题需要一个反向顺序的LinkedHashMap,一些答案建议使用TreeSet,但这会根据键对地图重新排序。

此解决方案允许对原始的LinkedHashMap进行迭代,而不是像已经提出的那样对新的ArrayList进行迭代:

List<String> reverseOrderedKeys = new ArrayList<String>(linkedHashMap.keySet());
Collections.reverse(reverseOrderedKeys);
for (String key : reverseOrderedKeys) {
    RecordItemElement line = linkedHashMap.get(key);
}

答案 2

哈希地图:

HashMap<Integer, String> map = new HashMap<Integer, String>();

反向迭代值:

ListIterator<Sprite> iterator = new ArrayList<String>(map.values()).listIterator(map.size());
while (iterator.hasPrevious()) String value = iterator.previous();

反向迭代键:

ListIterator<Integer> iterator = new ArrayList(map.keySet()).listIterator(map.size());
while (iterator.hasPrevious()) Integer key = iterator.previous();

对两者进行反向迭代:

ListIterator<Map.Entry<Integer, String>> iterator = new ArrayList<Map.Entry<Integer, String>>(map.entrySet()).listIterator(map.size());
while (iterator.hasPrevious()) Map.Entry<Integer, String> entry = iterator.previous();