¿Cómo puedo iterar a través de los elementos de un LinkedHashSet
del último elemento al primero?Java LinkedHashSet iteración hacia atrás
Respuesta
Si desea seguir utilizando las colecciones, se puede utilizar el 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 usted está muy bien con el uso de una matriz en su lugar, podría echar un vistazo al hvgotcodes' answer.
er, suponiendo que decir LinkedHashSet ...
me gustaría utilizar toArray y sólo tiene que utilizar un revés para el lazo.
Puede haber una forma mejor de hacerlo, pero debería funcionar. toArray
garantías cualquier orden se conserva
Si este conjunto hace ninguna garantía en cuanto a qué ordenar sus elementos están devuelto por el 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--){
..
}
Esto funciona pero es bastante ineficiente porque copia el conjunto ... – fig
Desde el javadoc: "Este lista enlazada define el orden de iteración, que es el orden en que los elementos se insertaron en el conjunto (inserción orden)."
Así que usted puede simplemente:
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);
}
"del último al primero". – hvgotcodes
Ésta es otra manera:
LinkedHashSet<T> set = ...
List<T> list = new ArrayList<>(set);
Collections.reverse(list);
for(T item : list){
...
}
Si realmente se quiere decir LinkedHashSet, podría poner los elementos en un ArrayList y luego usar ListIterator del ArrayList.
ListIterator<T> l = new ArrayList<T>(yourLinkedHashList).listIterator();
// ListIterator can iterate in reverse
while(l.hasPrevious()) {
T obj = l.previous();
}
- 1. Iteración hacia atrás
- 2. Depuración hacia atrás
- 3. Encadenamiento hacia adelante y encadenamiento hacia atrás en Java
- 4. iteración a través de una matriz más rápido hacia atrás y luego hacia delante
- 5. Eliminar líneas hacia atrás
- 6. Enviando vista hacia atrás
- 7. hacia atrás glsl compatibilidad
- 8. Reproducir archivo WAV hacia atrás
- 9. eliminación hacia atrás en R
- 10. eliminar línea hacia atrás (Emacs)
- 11. vim eliminar trucos hacia atrás
- 12. Reproducción de audio hacia atrás
- 13. van hacia atrás en Git
- 14. cómo hacer esto ... ¿hacia atrás?
- 15. Foreach de Python hacia atrás
- 16. RegEx avanzada: Positivo de búsqueda hacia atrás
- 17. Java Calendar.set (Calendar.DAY_OF_WEEK, Calendar.SUNDAY), ¿se desplazará hacia atrás, hacia adelante o será desconocido?
- 18. Desplazar una animación jQuery hacia atrás y hacia adelante
- 19. Git: Cómo moverse hacia atrás y hacia adelante entre confirmaciones
- 20. Ordenar ISO 8601 fechas hacia adelante o hacia atrás
- 21. Administrar hacia adelante y hacia atrás en Richfaces
- 22. Búsqueda hacia atrás en el modo vi
- 23. ¿Cómo configuro una selección hacia atrás?
- 24. Bash o Python para ir hacia atrás?
- 25. R Expresión regular de búsqueda hacia atrás
- 26. Migración hacia atrás con Django South
- 27. ¿Cómo puedo navegar hacia atrás en Xcode?
- 28. referencias hacia atrás nombran con preg_replace
- 29. Android compatibilidad de código hacia atrás
- 30. Regexp de búsqueda hacia atrás javascript
Por qué en Java Collection Framework no está incluido. LinkedHashSet mantiene el orden FIFO, por lo que una utilidad para convertir el pedido en LIFO debe estar allí, lo que parece ser útil cuando el requisito es mantener el orden de inserción al mismo tiempo que es posible que tengamos que iterar en orden inverso. En mi proyecto ya había un par de veces que necesitaba esto. Desafortunadamente, tengo que usar List como intermediario para aprovechar la utilidad Collections.reverse(). Esto es sucio, ¿no? – Bhavesh