Jaki jest najlepszy sposób na uzyskanie wartości z java.util.Collection według indeksu?Najlepszy sposób na uzyskanie wartości z kolekcji według indeksu
Odpowiedz
Konwersja gromadzenia w tablicy przy użyciu funkcji Zadanie [] toArray (Object [] a)
Generalnie, nie ma dobrego sposobu, jak Collection
nie jest gwarantowany ustalili indeksów. Tak, możesz je iterować, tak jak działa funkcja Array (i inne funkcje). Ale kolejność iteracji niekoniecznie jest naprawiona, a jeśli próbujesz utworzyć indeks do ogólnej kolekcji, prawdopodobnie robisz coś źle. Bardziej sensownym byłoby indeksowanie do List.
Nie powinieneś. a Collection
unika omawiania indeksów, ponieważ może nie mieć sensu dla określonego zbioru. Na przykład: List
sugeruje jakąś formę zamawiania, ale Set
nie.
Collection<String> myCollection = new HashSet<String>();
myCollection.add("Hello");
myCollection.add("World");
for (String elem : myCollection) {
System.out.println("elem = " + elem);
}
System.out.println("myCollection.toArray()[0] = " + myCollection.toArray()[0]);
daje mi:
elem = World
elem = Hello
myCollection.toArray()[0] = World
Podczas:
myCollection = new ArrayList<String>();
myCollection.add("Hello");
myCollection.add("World");
for (String elem : myCollection) {
System.out.println("elem = " + elem);
}
System.out.println("myCollection.toArray()[0] = " + myCollection.toArray()[0]);
daje mi:
elem = Hello
elem = World
myCollection.toArray()[0] = Hello
Dlaczego chcesz to zrobić? Czy możesz nie tylko przejrzeć kolekcję?
Musisz zawinąć swoją kolekcję na liście (new ArrayList(c)
) lub użyć c.toArray()
, ponieważ Kolekcje nie mają pojęcia "indeks" lub "zamówienie".
zgadzam się z odpowiedzią Matthew Flaschen „s i po prostu chciał pokazać przykłady wariantów przypadku nie można przełączyć się do listy (bo zwrotów bibliotekę zbiór):
List list = new ArrayList(theCollection);
list.get(5);
Albo
Object[] list2 = theCollection.toArray();
doSomethingWith(list[2]);
Jeśli wiesz, co to jest generics, mogę dostarczyć próbki również.
Edytuj: To kolejne pytanie, co jest intencją i semantyką oryginalnej kolekcji.
Jeśli funkcja biblioteczna zwraca kolekcję, to nie sądzę, że masz jakiekolwiek gwarancje co do kolejności elementów wewnątrz tej kolekcji. Przypuszczalnie wywołanie biblioteki zwraca kolekcję właśnie dlatego, że nie chce, abyś dokonywał tego rodzaju założeń? – butterchicken
Dobra uwaga. PO nie podzielił się wystarczającą ilością informacji na temat rodzaju biblioteki, z której korzysta. Niektóre biblioteki zwracają kolekcję tylko dlatego, że programista przeczytał o najlepszej praktyce, aby zwrócić jakiś super interfejs zamiast konkretnej implementacji. Biblioteka mogłaby po prostu zwrócić Iterable, jeśli nigdy nie zamierzano pozwolić na nic innego poza zapętleniem wyniku (jak w AXIOM). – akarnokd
ty ostatecznie chcą List:
Interfejs Lista zawiera cztery metody pozycjonowania (indeksowane) dostęp do elementów listy. Listy (takie jak tablice Java) mają wartość zero.
także
Zauważ, że te operacje można wykonać w czasie proporcjonalnym do wartości indeksu dla niektórych wdrożeń (klasy LinkedList, na przykład). Tak więc, iteracja nad elementami na liście> jest zazwyczaj lepsza niż indeksowanie przez nią, jeśli osoba dzwoniąca nie zna implementacji .
Jeśli potrzebujesz indeksu w celu zmiany swojej kolekcji należy pamiętać, że lista zawiera specjalną ListIterator które pozwalają uzyskać indeks:
List<String> names = Arrays.asList("Davide", "Francesco", "Angelocola");
ListIterator<String> i = names.listIterator();
while (i.hasNext()) {
System.out.format("[%d] %s\n", i.nextIndex(), i.next());
}
Zgadzam się, że jest to ogólnie zły pomysł . Jednak Commons Collections miał ładny rutynowych dla uzyskania wartości przez wskaźnik, jeśli naprawdę trzeba:
Byłoby tak wygodne, aby po prostu przekonwertować swoją kolekcję na listę ilekroć aktualizacji. Ale jeśli inicjujesz, wystarczy:
for(String i : collectionlist){
arraylist.add(i);
whateverIntID = arraylist.indexOf(i);
}
Bądź otwarty.
zastosowanie dla każdej pętli ...
ArrayList<Character> al=new ArrayList<>();
String input="hello";
for(int i=0;i<input.length();i++){
al.add(input.charAt(i));
}
for (Character ch : al) {
System.Out.println(ch)
}
- 1. Clojure najlepszy sposób na uzyskanie wielu wątków?
- 2. Najlepszy sposób na uzyskanie oryginalnego celu
- 3. Najlepszy sposób na uzyskanie obiektu typu z łańcucha w .NET
- 4. Magento - Najlepszy sposób odwrócenia kolekcji
- 5. Jak uzyskać model z kolekcji Backbone.js według jego identyfikatora?
- 6. jquery znaleźć według indeksu na liście
- 7. Najlepszy sposób na utrzymanie indeksu w czasie rzeczywistym?
- 8. javascript: uzyskanie indeksu td
- 9. Jaki jest najlepszy sposób sortowania hashtable według wartości?
- 10. Najlepszy sposób na wykonanie elokwentnej kolekcji na niestandardową tablicę
- 11. Null bezpieczny sposób na uzyskanie wartości z IDataReader
- 12. Orchard CMS: Właściwy sposób na uzyskanie wartości pola z widoku?
- 13. Najlepszy sposób na uzyskanie Matlab <-> Interfejs C++
- 14. Najlepszy sposób na uzyskanie aktualnej pogody przez interfejs API?
- 15. Najlepszy sposób na uzyskanie pliku Czas modyfikacji w sekundach
- 16. Najlepszy sposób na uzyskanie dostępu do sąsiednich komponentów/pól
- 17. Prosty sposób na uzyskanie elementu według identyfikatora w znaczniku div?
- 18. Jaki jest najlepszy sposób na uzyskanie równoległej nieskończonej pętli?
- 19. Najlepszy sposób na uzyskanie tożsamości wstawionego wiersza w serwerze połączonym?
- 20. Najlepszy sposób na uzyskanie identyfikatora komputera w systemie Linux?
- 21. Jaki jest najlepszy sposób na uzyskanie liczb losowych w NumPy?
- 22. C# Najlepszy sposób na uzyskanie głębokości folderu dla danej ścieżki?
- 23. Uzyskiwanie pozycji listy według indeksu
- 24. Najlepszy sposób na uzyskanie tylko zmodyfikowanych wierszy z obserwowalnego pola (gdy dostępna jest opcja edycji zbiorczej)
- 25. Najlepszy sposób sortowania kolekcji w CompositeView
- 26. Najlepszy sposób na obsługę dużej kolekcji formularzy w Symfony2
- 27. Jaki jest najlepszy sposób na uzyskanie różnych/unikalnych wartości za pomocą dodatku SPQuery?
- 28. Jaki jest najlepszy sposób na uzyskanie ostatnich elementów N z tablicy Perla?
- 29. Zwiększ pojemnik multi-indeksu z indeksu na podstawie wartości zagnieżdżonych
- 30. Jaki jest najlepszy sposób uzyskania cookie według nazwy w JavaScript?
Hi @butterchicken, moja sprawa jest taka, że używam LinkedHashMap gdzie mogę dostać zestaw kluczy (który to zestaw). Znalazłem ten post: http://stackoverflow.com/questions/2923856/is-the-order-guaranteed-for-return--keys-and-values-od--linkedhashmap-o, że porządek wewnątrz ten zestaw jest gwarantowany. Czy nadal nie powinienem się nad tym zastanawiać? –
jobbert
@jobbert Możesz absolutnie iterować nad nim. W tym przypadku dostajesz 'Set', ponieważ jest to umowa interfejsu' Map'. – butterchicken