Jak mogę iterować elementy z LinkedHashSet
od ostatniego elementu do pierwszego?Java LinkedHashSet itallation do tyłu
Odpowiedz
Jeśli chcesz nadal korzystać z kolekcji, można użyć następujących:
LinkedHashSet<T> set = ...
LinkedList<T> list = new LinkedList<>(set);
Iterator<T> itr = list.descendingIterator();
while(itr.hasNext()) {
T item = itr.next();
// do something
}
Jeśli jesteś w porządku z pomocą tablicy zamiast tego, może spojrzeć na hvgotcodes' answer.
er, zakładając, że masz na myśli LinkedHashSet ...
użyłbym toArray i po prostu użyć odwrotnego pętli for.
Może istnieć lepszy sposób na zrobienie tego, ale to powinno zadziałać. toArray
gwarancje dowolny porządek jest zachowany
Jeśli ten zestaw sprawia żadnych gwarancji, co zamówić jego elementy są zwrócony przez jego iterator, ta metoda musi zwrócić elementy w samej kolejności.
Coś
Set<MyType> mySet = new LinkedHashSet();
...
MyType[] asArray = mySet.toArray();
for (int i = asArray.length - 1; i>=0; i--){
..
}
Działa to, ale jest dość nieefektywne, ponieważ kopiuje zestaw ... – fig
Z javadoc „to związana lista określa kolejność iteracji, która jest kolejność w której elementy zostały umieszczone w zestawie (zanurzeniowego kolejności).”
więc można po prostu:
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);
}
"od ostatniego do pierwszego." – hvgotcodes
Jest to kolejny sposób:
LinkedHashSet<T> set = ...
List<T> list = new ArrayList<>(set);
Collections.reverse(list);
for(T item : list){
...
}
Jeśli naprawdę oznaczało LinkedHashSet, można umieścić elementy do ArrayList, a następnie użyć ListIterator ArrayList jest.
ListIterator<T> l = new ArrayList<T>(yourLinkedHashList).listIterator();
// ListIterator can iterate in reverse
while(l.hasPrevious()) {
T obj = l.previous();
}
- 1. LinkedHashSet wdrożyć LRU
- 2. wyślij podzbiór do tyłu
- 3. Wyślij subview do tyłu
- 4. Odtwórz plik WAV do tyłu
- 5. RGB do CMYK i algorytm do tyłu
- 6. Jak dodać kotwicę do przekierowania: do tyłu:
- 7. SwitchToThisWindow wysyła bieżące okno do tyłu
- 8. Jak przenieść gałąź do tyłu w git?
- 9. uzyskiwanie dostępu do wektora od tyłu
- 10. Dlaczego są parametry "atan2`" do tyłu "?
- 11. Jak wysłać okno WPF do tyłu?
- 12. Jak przenieść do tyłu folder nadrzędny
- 13. jak przesłać kolekcję do tyłu bez kopii?
- 14. Wyszukiwanie do tyłu w trybie vi
- 15. Powrót do tyłu w kombinatorach parsera scala?
- 16. Przewijanie do tyłu za pomocą konsoli RStudio
- 17. TransitionDrawable: automatyczne przejście do tyłu po ukończeniu
- 18. Recursive Prolog predykatu do tyłu/palindromu
- 19. Jak podzielić ciąg przez regex java z tyłu?
- 20. rozdzielczości zaimek tyłu
- 21. Culling z tyłu + GL_TRIANGLE_STRIP?
- 22. Jak wysłać obiekty w plikach NIB do przodu/do tyłu?
- 23. Czy udokumentowano podwójne operatory rurociągów do przodu/do tyłu?
- 24. Dlaczego są dwa ukośniki - do przodu i do tyłu?
- 25. Przewijanie animacji jQuery do tyłu i do przodu
- 26. Kontrola UIPageViewController podczas przesuwania do tyłu lub do przodu
- 27. routing kręgosłupa wykrywanie, czy do przodu czy do tyłu wciśnięty
- 28. Przewiń do tyłu i do przodu przez działki matplotlib
- 29. Odtwarzanie audio z tyłu HTMLMediaElement
- 30. SAS mogę wykonać obserwacje procesowe sas do tyłu
Dlaczego w Java Collection Framework nie jest uwzględniony. LinkedHashSet utrzymuje zamówienie FIFO, więc narzędzie do konwersji zlecenia na LIFO powinno tam być, co wydaje się być bardzo przydatne, gdy wymaganiem jest utrzymanie zamówienia reklamowego w tym samym czasie, gdy potrzebujemy go do iteracji w odwrotnej kolejności. W moim projekcie był już czas, którego potrzebowałem. Niestety, używam List jako pośrednika do skorzystania z narzędzia Collections.reverse(). To jest brudne, prawda? – Bhavesh