Обратная мультикарта в 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) дополнительная память

Один из вариантов - взять размер карты и извлечь записи в обратном порядке, начиная с последнего индекса. Вы хотите использовать только итератор? Или вы можете написать свой собственный итератор, чтобы получить желаемую функциональность.

Другие вопросы по тегам