Обратная мультикарта в Java
У меня есть мультикарта, и я повторяю это с hasnext()
,
Set keySet = myMap.keySet();
Iterator keyIterator = keySet.iterator();
while (keyIterator.hasNext() ) {
Integer key = (Integer) keyIterator.next();
System.out.println("K"+key);
List values = (List) myMap.get(key);
System.out.println("V"+values);
}
И вывод:
К = 4,
V = [Сэм Индия],
К = 3,
V = [Сэм, Сэм США],
К = 5,
V = [Сэм]
Но мне нужен вывод в обратном формате, как:
К = 5,
V = [Сэм],
К = 3,
V = [Сэм, Сэм США],
К = 4,
V = [Сэм Индия]
Можем ли мы иметь hasPrevious() в мультикарте?
2 ответа
Вы действительно должны начать использовать дженерики.
Самый простой взлом, вероятно, заключается в использовании
ArrayList<List<?>> list = new ArrayList<>(keySet);
ListIterator<List<?>> iter = list.listIterator(list.size() - 1);
а затем повторить в обратном направлении. Тем не менее, это будет сериализовать набор, так что это O(n)
дополнительная память
Один из вариантов - взять размер карты и извлечь записи в обратном порядке, начиная с последнего индекса. Вы хотите использовать только итератор? Или вы можете написать свой собственный итератор, чтобы получить желаемую функциональность.