我有一个LinkedHashMap:
LinkedHashMap<String, RecordItemElement>
Run Code Online (Sandbox Code Playgroud)
我需要从给定键的位置向后迭代.因此,如果我获得了第10项的密钥,我需要向后遍历hashmap 9,8,7等.
HashMap:
HashMap<Integer, String> map = new HashMap<Integer, String>();
Run Code Online (Sandbox Code Playgroud)
对于反向迭代值:
ListIterator<Sprite> iterator = new ArrayList<String>(map.values()).listIterator(map.size());
while (iterator.hasPrevious()) String value = iterator.previous();
Run Code Online (Sandbox Code Playgroud)
对于密钥的反向迭代:
ListIterator<Integer> iterator = new ArrayList(map.keySet()).listIterator(map.size());
while (iterator.hasPrevious()) Integer key = iterator.previous();
Run Code Online (Sandbox Code Playgroud)
对于两者的反向迭代:
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();
Run Code Online (Sandbox Code Playgroud)
这个问题需要一个反向顺序的LinkedHashMap,一些答案建议使用TreeSet,但这会根据键重新排序地图.
这个解决方案允许迭代原始LinkedHashMap而不是新的ArrayList,因为它也被提出:
List<String> reverseOrderedKeys = new ArrayList<String>(linkedHashMap.keySet());
Collections.reverse(reverseOrderedKeys);
for (String key : reverseOrderedKeys) {
RecordItemElement line = linkedHashMap.get(key);
}
Run Code Online (Sandbox Code Playgroud)
您不必遍历它.但是关闭钥匙并将其存储在列表中会很方便.这是你可以做indexOf()类型操作的唯一方法.
List<String> keyList = new ArrayList<String>(map.keySet());
// Given 10th element's key
String key = "aKey";
int idx = keyList.indexOf(key);
for ( int i = idx ; i >= 0 ; i-- )
System.out.println(map.get(keyList.get(i)));
Run Code Online (Sandbox Code Playgroud)