Tworzymy Set
jako:
Set myset = new HashSet()
Jak tworzymy List
w Javie?
java
list
collections
użytkownik93796
źródło
źródło
Odpowiedzi:
lub z ogólnymi ( Java 7 lub nowszy)
lub z ogólnymi (starsze wersje Java)
źródło
Dodatkowo, jeśli chcesz utworzyć listę, która zawiera rzeczy (chociaż będzie miała stały rozmiar):
źródło
Pozwól, że streszczę i dodam coś:
JDK
Guawa
Niezmienna lista
Pusta niezmienna lista
Lista znaków
Lista liczb całkowitych
źródło
Ints.asList
nie tworzy niezmiennej listy, ale listę o stałym rozmiarze, popartą podaną tablicą liczb całkowitych (tzn. obsługujeList.set(int, Object)
). Drugi przykład „niezmiennej listy znaków” również nie jest niezmienny (usunę tę linię).W Javie 8
Aby utworzyć niepustą listę o stałym rozmiarze (operacje takie jak dodawanie, usuwanie itp. Nie są obsługiwane):
Aby utworzyć niepustą zmienną listę:
W Javie 9
Korzystanie z nowych
List.of(...)
statycznych metod fabrycznych:W Javie 10
Korzystanie z wnioskowania o typ zmiennej lokalnej :
I postępuj zgodnie z najlepszymi praktykami ...
Nie używaj surowych typów
Od Java 5 generics są częścią języka - powinieneś ich używać:
Program do interfejsów
Na przykład program do
List
interfejsu:Zamiast:
źródło
Najpierw przeczytaj to , a potem to i to . 9 razy na 10 skorzystasz z jednej z tych dwóch implementacji.
W rzeczywistości po prostu przeczytaj Przewodnik firmy Sun dotyczący ram kolekcji .
źródło
ArrayList
. Jeśli pracuję tylko na końcach listy, jest to deque (lub kolejka) i korzystam zArrayDeque
implementacji. Powodem jest to, że chociaż implementacje tablicowe mogą marnować trochę pamięci na puste sloty (kiedy nie mogę przewidzieć niezbędnej pojemności), w przypadku małych kolekcji jest to porównywalne do obciążenia wszystkich instancji węzłów na liście połączonej ( lub deque). W zamian dostaję losowy dostęp. Jakie wyjątkowe korzyściLinkedList
zapewnia?źródło
Od wersji Java 7 można wnioskować o typie dla tworzenia instancji ogólnych , więc nie ma potrzeby duplikowania ogólnych parametrów po prawej stronie przypisania:
Listę o stałym rozmiarze można zdefiniować jako:
W przypadku niezmiennych list możesz użyć biblioteki Guava :
źródło
Lista jest tylko interfejsem, tak jak Set .
Podobnie jak HashSet jest implementacją zestawu, który ma pewne właściwości w zakresie dodawania / wyszukiwania / usuwania wydajności, ArrayList jest samą implementacją listy.
Jeśli zajrzysz do dokumentacji odpowiednich interfejsów, znajdziesz „Wszystkie znane klasy implementacyjne” i możesz zdecydować, który jest bardziej odpowiedni dla twoich potrzeb.
Możliwe, że to ArrayList .
źródło
List
jest interfejsem podobnymSet
i maArrayList
iLinkedList
jako implementacje ogólnego przeznaczenia .Możemy stworzyć Listę jako:
Możemy również utworzyć listę o stałym rozmiarze jako:
Prawie zawsze używalibyśmy
ArrayList
zamiastLinkedList
implementacji:LinkedList
zużywa dużo miejsca na przedmioty i działa źle, gdy mamy dużo elementów.LinkedList
wymaga czasu O (n) w porównaniu do O (1) wArrayList
.Utworzonej
Arrays.asList
powyżej listy nie można modyfikować strukturalnie, ale jej elementy można nadal modyfikować.Java 8
Zgodnie z dokumentem metoda
Collections.unmodifiableList
zwraca niemodyfikowalny widok podanej listy. Możemy to uzyskać w następujący sposób:Java 9
W przypadku korzystania z Java 9 :
Java 10
Jeśli jesteśmy w Javie 10, metoda
Collectors.unmodifiableList
zwróci instancję naprawdę niemodyfikowalnej listy wprowadzonej w Javie 9. Sprawdź tę odpowiedź, aby uzyskać więcej informacji na temat różnicy wCollections.unmodifiableList
porównaniuCollectors.unmodifiableList
z Javą 10 .źródło
Czasami - ale bardzo rzadko - zamiast nowej ArrayList, możesz chcieć nowej LinkedList. Zacznij od ArrayList, a jeśli masz problemy z wydajnością i dowody, że lista stanowi problem, i wiele dodawania i usuwania na tej liście - to - nie wcześniej - przełącz się na LinkedList i sprawdź, czy coś się poprawi. Ale w zasadzie trzymaj się ArrayList i wszystko będzie dobrze.
źródło
Lub z lekami generycznymi
Możesz oczywiście zastąpić ciąg dowolnym rodzajem zmiennej, np. Integer.
źródło
Jeden przykład:
Możesz zajrzeć do javadoc dla List i znaleźć wszystkie znane klasy implementujące
List
interfejs, które są zawarte w java api.źródło
Korzystając z kolekcji Google , możesz użyć następujących metod w klasie Listy
Występują przeciążenia związane z inicjowaniem vararg i inicjowaniem z
Iterable<T>
.Zaletą tych metod jest to, że nie trzeba jawnie określać parametru ogólnego, tak jak w przypadku konstruktora - kompilator wywnioskuje go na podstawie typu zmiennej.
źródło
Musisz zaimportować
List
iArrayList
.źródło
Więcej opcji, aby zrobić to samo z Javą 8, nie lepiej, nie gorzej, po prostu inaczej i jeśli chcesz wykonać dodatkową pracę z listami, strumienie zapewnią ci więcej możliwości (filtrowanie, mapowanie, zmniejszanie itp.)
źródło
W Javie 9 możesz wykonać następujące czynności, aby stworzyć niezmienny
List
:źródło
Opcjonalnie możesz tutaj użyć inicjowania podwójnego nawiasu klamrowego:
źródło
Istnieje wiele sposobów tworzenia zestawu i listy. HashSet i ArrayList to tylko dwa przykłady. W dzisiejszych czasach dość powszechne jest stosowanie leków generycznych z kolekcjami. Sugeruję, żebyś spojrzał na to, czym one są
To dobre wprowadzenie do wbudowanych kolekcji Java. http://java.sun.com/javase/6/docs/technotes/guides/collections/overview.html
źródło
Lepiej jest używać ogólnych, jak sugerowano poniżej:
W przypadku korzystania z LinkedList.
źródło
Korzystając z kolekcji Eclipse , możesz utworzyć taką listę:
Jeśli chcesz niezmienną listę:
Możesz uniknąć automatycznego boxowania, używając list prymitywnych. Oto, w jaki sposób tworzysz listy int:
Istnieją warianty dla wszystkich 8 prymitywów.
Uwaga: jestem osobą odpowiedzialną za kolekcje Eclipse.
źródło
Poniżej przedstawiono niektóre sposoby tworzenia list.
Spowoduje to utworzenie listy o ustalonym rozmiarze, dodawanie / usuwanie elementów nie jest możliwe, wyrzuci,
java.lang.UnsupportedOperationException
jeśli spróbujesz to zrobić.Poniższa wersja to prosta lista, w której można dodawać / usuwać dowolną liczbę elementów.
Oto jak utworzyć
LinkedList
w java. Jeśli chcesz często wstawiać / usuwać elementy z listy, powinieneś użyćLinkedList
zamiastArrayList
źródło
Arrays.asList("Male", "Female")
.Spróbuj tego:
Lub:
źródło
Jeśli potrzebujesz szeregowej, niezmiennej listy z jednym bytem, możesz użyć:
źródło
Jak deklaracja listy tablic w java jest jak
Istnieje wiele sposobów tworzenia i inicjowania listy tablic w Javie.
źródło