retainall - sets in java
Java LinkedHashSet iteración hacia atrás (5)
¿Cómo puedo recorrer los elementos de un LinkedHashSet
desde el último elemento hasta el primero?
Desde el javadoc: "Esta lista vinculada define el orden de iteración, que es el orden en que se insertaron los elementos en el conjunto (orden de inserción)".
Así que simplemente puedes:
LinkedHashSet<Integer> numbers = new LinkedHashSet<Integer>();
numbers.add(1);
numbers.add(2);
numbers.add(33);
numbers.add(44);
numbers.add(108);
for (Integer i : numbers) {
System.out.println(i);
}
Esta es otra manera:
LinkedHashSet<T> set = ...
List<T> list = new ArrayList<>(set);
Collections.reverse(list);
for( T item : list ){
...
}
Si desea continuar utilizando colecciones, puede usar lo siguiente:
LinkedHashSet<T> set = ...
LinkedList<T> list = new LinkedList<>(set);
Iterator<T> itr = list.descendingIterator();
while(itr.hasNext()) {
T item = itr.next();
// do something
}
Si no está de acuerdo con usar una matriz, puede echar un vistazo a la respuesta de hvgotcodes .
Si realmente quiso decir LinkedHashSet, podría poner los elementos en un ArrayList y luego usar el ListIterator de ArrayList.
ListIterator<T> l = new ArrayList<T>(yourLinkedHashList).listIterator();
// ListIterator can iterate in reverse
while(l.hasPrevious()) {
T obj = l.previous();
}
er, asumiendo que te refieres a LinkedHashSet ...
Yo usaría toArray y solo usaría un ciclo inverso para.
Puede haber una mejor manera de hacerlo, pero eso debería funcionar. toArray
garantiza que cualquier orden se conserva
Si este conjunto ofrece alguna garantía en cuanto al orden en que sus elementos son devueltos por su iterador, este método debe devolver los elementos en el mismo orden.
Algo como
Set<MyType> mySet = new LinkedHashSet();
...
MyType[] asArray = mySet.toArray();
for (int i = asArray.length - 1; i>=0; i--){
..
}