sets retainall remove linked example java set iteration linkedhashset

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--){ .. }