Как реверсировать коллекцию объектов в Java

В этом примере показано, как обратить содержимое LinkedList вызвав метод Collections: class: Collections.reverse() . В качестве коллекции объектов мы выбрали LinkedList. Этот же метод применим и к другим коллекциям, которые наследуются от интерфейса java.util.Collection. В качестве параметра необходимо передать экземпляр LinkedList. Этот метод используется для обратного порядка элементов в списке.

Example:

Этот код обрабатывает следующие три коллекции Java-объектов: ArrayList, LinkedList и Vector.

import java.util.Collections; 
import java.util.LinkedList;

public class inverse_collection {

public static void main(String[] args) {

LinkedList llist = new LinkedList();

llist.add("1");
llist.add("2");
llist.add("3");
llist.add("4");

System.out.println("Перед инверсией: "+llist);

Collections.reverse(llist);

System.out.println("После инверсии: "+llist);
}
}
Result:

Перед инверсией: [1, 2, 3, 4]
После инверсии: [4, 3, 2, 1]
Коллекции, наследуемые от java.util.Set и java.util.Map, не поддерживаются методом Collections.reverse(). Однако частичное решение возможно:
  • Создать экземпляр ArrayList с коллекцией из интерфейса Set или Map
  • Применить метод Collections.reverse() к ArrayList
  • Элементы не могут быть скопированы обратно в исходную коллекцию. Зачем? Поскольку интерфейс Set не гарантирует порядок вставки.
Примечание: Интерфейс Map представляет собой хеш-таблицу ключ/значение. Это означает, что у нас есть выбор только инвертировать ключи или значения, не копируя результаты обратно в коллекцию, реализующую Map, потому что она не сохраняет порядок элементов.

Пример TreeSet:

import java.util.ArrayList; 
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.TreeSet;

public class Intervert {

public static void main(String[] args) {

// создание TreeSet
TreeSet tset = new TreeSet();

// добавляем элементы в treeset
tset.add("a");
tset.add("b");
tset.add("c");

Iterator iterator = tset.iterator();

// отображение TreeSet
System.out.println("Элементы древовидного набора в порядке возрастания: ");
while (iterator.hasNext()){
System.out.println(iterator.next());
}

List list = new ArrayList(tset);

Collections.reverse(list);

// обратное отображение значений
System.out.println("Элементы treeset в обратном порядке: ");
for(String s:list)
System.out.println(s);
}
}
Output:

Элементы treeset в порядке возрастания: 
a
b
c
treeset в обратном порядке:
c
b
a