Uporządkowana kolekcja (znana również jako sekwencja). Użytkownik tego interfejsu ma precyzyjną kontrolę nad tym, gdzie na liście wstawiany jest każdy element. Użytkownik może uzyskać dostęp do elementów według indeksu liczb całkowitych (pozycja na liście) i wyszukiwać elementy na liście.
Kolekcja, która nie zawiera zduplikowanych elementów. Bardziej formalnie, zestawy nie zawierają pary elementów e1 i e2, tak że e1.equals (e2), a co najwyżej jeden element zerowy. Jak sugeruje jego nazwa, interfejs ten modeluje abstrakcję zestawu matematycznego.
W przypadku SortedSet nie ma dwóch elementów, w których compareTo () == 0, ponieważ nie jest wywoływany równy.
Peter Lawrey,
34
Zestaw MOŻE być zamówiony, więc pierwsze stwierdzenie tej odpowiedzi jest mylące, nawet jeśli oczywiście należy wybrać Listę w celu wykonania nakazu
odbioru
24
ŹLE! Zestaw Java można zamówić, w zależności od implementacji; na przykład zamówiony jest zestaw Java TreeSet. W kontekście Javy jedyną różnicą między Listą a Zestawem jest to, że Zestaw zawiera unikalne elementy. W kontekście matematyki elementy zestawu są unikalne i nieuporządkowane.
stackoverflowuser2010
44
Tak, zestaw Java MOŻE BYĆ, ALE NIE jest KONIECZNIE zamówiony. Tak, jeśli masz zestaw TreeSet, możesz liczyć na to, że zostanie zamówiony. Ale musisz WIEDZIEĆ, że masz TreeSet, a nie tylko zestaw. Jeśli otrzymasz zestaw, nie możesz polegać na tym, który zostanie zamówiony. Z drugiej strony Lista jest uporządkowana z samej swojej natury i każda implementacja Listy musi być zamówiona. Tak więc, zgodnie z definicją interfejsu, nie jest szczególnie błędne stwierdzenie, że Zestaw jest nieuporządkowany, ale być może bardziej technicznie poprawne jest stwierdzenie, że Zestaw nie daje gwarancji kolejności elementów.
Spanky Quigman
14
Nie łącz „zamówionych” z „posortowanymi”. Podobnie nie należy łączyć umowy dotyczącej interfejsu i implementacji interfejsu. Błędem jest również stwierdzenie, że coś, co jest „nieuporządkowane”, nie ma żadnego porządku, oznacza to po prostu, że nie ma żadnych gwarancji dotyczących realizacji zamówienia (i że kolejność może nie być stabilna między rozmowami, w przeciwieństwie do listy uporządkowanej).
lilbyrdie
223
╔═══════════════════╦══════════════════════╦═════════════════════════════╗║║List║Set║╠═══════════════════╬══════════════════════╬═════════════════════════════╣║Duplicates║ YES ║ NO ║╠═══════════════════╬══════════════════════╬═════════════════════════════╣║Order║ ORDERED ║ DEPENDS ON IMPLEMENTATION ║╠═══════════════════╬══════════════════════╬═════════════════════════════╣║PositionalAccess║ YES ║ NO ║╚═══════════════════╩══════════════════════╩═════════════════════════════╝
Należy zwrócić uwagę na jedno: wydajność dostępu pozycyjnego zależy w dużej mierze od podstawowej implementacji, tablica vs lista połączona stackoverflow.com/questions/322715/…
Christophe Roussy
1
W jaki sposób zestawy są indeksowane, jeśli nie według dostępu pozycyjnego? (+1 dla tabeli ASCII)
tplive
72
Uporządkowane listy elementów (unikalne lub nie) Zgodne z interfejsem Java o nazwieList
Można uzyskać dostęp przez indeks
zaimplementowano za pomocą
Połączona lista
ArrayList
Wykazy unikalnych elementów: Zgodne z interfejsu Java o nazwieSet
może nie być dostępne przez indeks
zaimplementowano za pomocą
HashSet (nieuporządkowany)
LinkedHashSet (zamówiono)
TreeSet (posortowane według porządku naturalnego lub według dostarczonego komparatora)
Oba interfejsy Seti Listsą zgodne z interfejsem Java o nazwieCollection
ListNa ogół zezwalają na powielanie obiektów.
Lists muszą być zamawiane i dlatego są dostępne według indeksu.
Klasy wdrożeniowe obejmują: ArrayList, LinkedList,Vector
Zestaw:
Sets ma nie dopuszczać duplikaty obiektów. Większość implementacji jest nieuporządkowana, ale jest specyficzna dla implementacji.
Klasy implementacji obejmują:
HashSet(nieuporządkowany),
LinkedHashSet(uporządkowany),
TreeSet(uporządkowany według porządku naturalnego lub dostarczonego komparatora)
Poprawny. LinkedHashSet zawiera elementy w kolejności wstawiania.
ggb667,
To interfejs, WSZYSTKO zależy od implementacji. List.get () może utworzyć plik zawierający pierwsze 5 miejsc po przecinku liczby pi i rzucić StackOverFlowException w niektórych implementacjach, nie oznacza to, że możesz powiedzieć „Lista to coś, co może tworzyć pliki”, ponieważ nie jest to część umowa zdefiniowana przez interfejs. Dokumenty twierdzą, że zbiór jest wzorowany na matematycznej koncepcji zbioru, który z definicji nie jest uporządkowany. Biorąc pod uwagę zestaw w kodzie, nie można założyć, że jest on zamówiony bez naruszenia zasad SOLID.
sara
@ kai, zwykle trzymam LinkedHashSetsię lewej strony, jeśli kod zależy od zamówienia później. Używam go tylko Setwtedy, gdy naprawdę go używam, ponieważ nie można założyć, że podstawowa implementacja jest podobna, LinkedHashSetmoże być dzisiaj, ale jutro kod się zmieni i zawiedzie.
Christophe Roussy
Jeśli zadeklarujesz LinkedHashSet, nie masz do czynienia z zestawem, więc zgłaszanie roszczeń dotyczących zachowania zestawów nie ma większego znaczenia. Powiedziałbym, że przypisywanie (możliwej) uporządkowania zestawom opartym na niektórych implementacjach jest podobne do powiedzenia: „Instancje Runnable mają metodę uruchamiania przeznaczoną do uruchomienia w pewnym wątku. Otwierają również połączenie DB i odczytują dane klientów w zależności od implementacji. „ Oczywiście niektóre implementacje mogą to zrobić, ale nie jest to sugerowane przez Runnable Interface.
sara,
5
To może nie być odpowiedź, której szukasz, ale JavaDoc klas kolekcji jest w rzeczywistości dość opisowy. Skopiuj / wklej:
Uporządkowana kolekcja (znana również jako sekwencja). Użytkownik tego interfejsu ma precyzyjną kontrolę nad tym, gdzie na liście wstawiany jest każdy element. Użytkownik może uzyskać dostęp do elementów według indeksu liczb całkowitych (pozycja na liście) i wyszukiwać elementy na liście.
W przeciwieństwie do zestawów, listy zazwyczaj pozwalają na duplikowanie elementów. Bardziej formalnie, listy zwykle dopuszczają pary elementów e1 i e2, tak że e1.equals (e2), i zazwyczaj pozwalają na wiele elementów zerowych, jeśli w ogóle dopuszczają elementy zerowe. Nie jest wykluczone, że ktoś może chcieć zaimplementować listę, która zabrania duplikatów, rzucając wyjątki czasu wykonywania, gdy użytkownik próbuje je wstawić, ale spodziewamy się, że takie użycie będzie rzadkie.
Zestaw to nieuporządkowana grupa odrębnych obiektów - niedozwolone są duplikaty obiektów. Zasadniczo jest to realizowane za pomocą kodu skrótu wstawianych obiektów. (Określone implementacje mogą dodawać kolejność, ale sam interfejs Set nie.)
Lista to uporządkowana grupa obiektów, która może zawierać duplikaty. To może być realizowane ze związkiem ArrayList, LinkedListitp
Jestem zdezorientowany 😕! Co w tym kontekście oznacza uporządkowane / nieuporządkowane? Czy ma to związek z kolejnością rosnącą i malejącą? Jeśli tak, Listnie zamówiono 😕
malhobayyeb
4
Kolejność jest uporządkowana, gdy dane wejściowe są ułożone dokładnie tak, jak zostało wprowadzone przez użytkownika, natomiast Sortowanie następuje, gdy dane wejściowe są sortowane leksykograficznie lub w porządku rosnącym / malejącym (pod względem wartości całkowitych). Nieuporządkowany oznacza, że dane wejściowe mogą, ale nie muszą być przechowywane w kolejności wprowadzonej przez użytkownika.
Akhil
5
Lista:
Lista umożliwia duplikowanie elementów i wartości zerowych. Łatwe wyszukiwanie za pomocą odpowiedniego indeksu elementów, a także wyświetla elementy w kolejności wstawiania. Przykład: (linkedlist)
Zestaw:
zestaw nie zezwala na żadne zduplikowane elementy i pozwala na pojedynczą pustą wartość. Nie będzie utrzymywał żadnej kolejności wyświetlania elementów. Tylko TreeSetbędzie wyświetlany w kolejności rosnącej.
Przykład: (TreeSet)
import java.util.TreeSet;publicclassSetExample{publicstaticvoid main(String[] args){// TODO Auto-generated method stubTreeSet<String> set =newTreeSet<String>();try{
set.add("hello");
set.add("world");
set.add("welcome");
set.add("all");for(String num : set){System.out.println( num);}
set.add(null);}catch(NullPointerException e){System.out.println(e);System.out.println("Set doesn't allow null value and duplicate value");}}}
Wynik:
all
hello
welcome
world zestaw
java.lang.NullPointerException nie zezwala na wartość zerową ani na zduplikowaną wartość
1.Lista zezwala na duplikaty wartości, a zestaw nie zezwala na duplikaty
2.Lista zachowuje kolejność, w której elementy zostały wstawione do listy Zestaw nie zachowuje kolejności. 3.Lista jest uporządkowaną sekwencją elementów, natomiast Set jest odrębną listą elementów, która jest nieuporządkowana.
1) Zestaw nie zezwala na duplikaty. Lista pozwala na duplikowanie. W oparciu o implementację Seta, zachowuje także kolejność wstawiania.
np LinkedHashSet. : Utrzymuje kolejność wprowadzania. Proszę kliknąć tutaj
2) zawiera metodę. Z natury zestawu zapewni lepszą wydajność dostępu. Najlepszy przypadek to o (1). Ale List ma problem z wydajnością do wywołania contains.
Wszystkie Listklasy zachowują kolejność wstawiania. Używają różnych implementacji opartych na wydajności i innych cechach (np. ArrayListDla szybkości dostępu do określonego indeksu, LinkedListpo prostu utrzymania porządku). Ponieważ nie ma klucza, duplikaty są dozwolone.
Na Setzajęcia nie utrzymują kolejność wstawiania. Mogą opcjonalnie narzucić określoną kolejność (jak w przypadku SortedSet), ale zazwyczaj mają kolejność zdefiniowaną w implementacji na podstawie niektórych funkcji skrótu (jak w przypadku HashSet). Ponieważ Sets są dostępne za pomocą klucza, duplikaty nie są dozwolone.
Mapy przechowują obiekty według klucza, ale ustawiają obiekty przechowywania przy użyciu unikalnej wartości związanej z obiektem, zwykle jego hash. (Mapy mogą również używać kodów skrótu do sprawdzania unikatowości klucza, ale nie są one wymagane).
Zestaw ADT nie określa kolejności, ale niektóre implementacje zestawu (takie jak LinkedHashSet) zachowują kolejność wstawiania.
Michael Myers
3
Jednak ważniejsza różnica polega na tym, że zestawy nie zezwalają na duplikaty. Tak działa torba / multiset.
Quinn Taylor
TreeSet ma zamawianie.
stackoverflowuser2010,
1
Kilka godnych uwagi różnic między Listą a Setem w Javie podano w następujący sposób:
1) Podstawowa różnica między List a Set w Javie pozwala na duplikowanie elementów. Lista w Javie zezwala na duplikaty, a Set nie zezwala na żadne duplikaty. Jeśli wstawisz duplikat w zestawie, zastąpi on starszą wartość. Każda implementacja Set w Javie będzie zawierała tylko unikalne elementy.
2) Kolejną znaczącą różnicą między List a Set w Javie jest kolejność. Lista jest zbiorem uporządkowanym, a Set jest zbiorem nieuporządkowanym. Lista zachowuje kolejność wstawiania elementów, oznacza to, że każdy element wstawiony wcześniej przejdzie na niższy indeks niż jakikolwiek element wstawiony później. Ustawiony w Javie nie utrzymuje żadnej kolejności. Chociaż zestaw zapewnia kolejną alternatywę o nazwie SortedSet, która może przechowywać elementy zestawu w określonej kolejności sortowania zdefiniowanej metodami Porównywalne i Porównawcze obiektów przechowywanych w zestawie.
3) Popularna implementacja interfejsu List w Javie obejmuje ArrayList, Vector i LinkedList. Podczas gdy popularna implementacja interfejsu Set obejmuje HashSet, TreeSet i LinkedHashSet.
Jest całkiem jasne, że jeśli chcesz zachować kolejność wstawiania lub obiekt, a Twoja kolekcja może zawierać duplikaty, List jest dobrym rozwiązaniem. Z drugiej strony, jeśli twoim wymogiem jest utrzymanie unikalnej kolekcji bez duplikatów, Set jest dobrym rozwiązaniem.
Set<E>i List<E>oba służą do przechowywania elementów typu E. Różnica polega na tym, że Setjest przechowywana w nieuporządkowany sposób i nie pozwala na duplikowanie wartości. Listsłuży do przechowywania elementów w uporządkowany sposób i pozwala na duplikowanie wartości.
Setdo elementów nie można uzyskać dostępu za pomocą pozycji indeksu, a do Listelementów można uzyskać dostęp za pomocą pozycji indeksu.
@BalusC proszę nie komentować, nie widząc daty ogłoszenia. Zobacz post godny w tym czasie.
Yash
0
Cześć Tak wiele odpowiedzi jest już podanych .. Pozwól mi wskazać kilka punktów, które nie zostały jeszcze wspomniane:
Większość implementacji List (ArrayList, Vector) implementujeRandomAccess interfejs, który jest interfejsem znacznika dla szybszego dostępu. Żadna z implementacji Seta tego nie robi.
List używa jednego specjalnego Iteratora, ListIteratorktóry obsługuje iterację w obu kierunkach . Zestaw używa Iteratora, który obsługuje tylko iterację jednokierunkową
HashSet trwa 5,5 razy więcej pamięci niż ArrayList do przechowywania samą liczbę elementów.
@smurti to trochę za późno i nie jestem pewien, czy zauważyłeś, ale twój pierwszy punkt zaprzecza samemu sobie: „Większość implementacji List (ArrayList, Vector) implementuje RandomAccess ...” i „... Żadna z List wdrożenia to robią ”
Peter M,
0
Największy inny to podstawowa koncepcja.
Z interfejsu Set and List . Zestaw to koncepcja matematyki. Metoda set rozszerza kolekcję. Nie dodawaj jednak nowej metody. size () oznacza liczność (więcej to BitSet.cardinality, Licznik liniowy, Log Log, HyperLogLog ). addAll () oznacza union. retainAll () oznacza skrzyżowanie. removeAll () oznacza różnicę.
Wymień jednak brak tych pojęć. Lista dodaje wiele metod do obsługi koncepcji sekwencji, których interfejs kolekcji nie zapewnia. podstawową koncepcją jest INDEKS . jak add (indeks, element), get (indeks), search (indexOf ()), remove (indeks) element. Lista zawiera również podlistę „ Widok kolekcji ” . Zestaw nie ma widoku. nie mają dostępu pozycyjnego. Lista zawiera również wiele algorytmów w klasie Kolekcje . sort (lista), binarySearch (lista), wstecz (lista), losowanie (lista), fill (lista). Params metody to interfejs listy . zduplikowane elementy są tylko wynikiem pojęć. nie zasadnicza różnica.
Zatem zasadniczą różnicą jest koncepcja. Zestaw to koncepcja zestawu matematyki. Lista jest pojęciem sekwencji.
Oto wyraźny przykład z groovy. tworzę zestaw i listę. następnie próbuję zapisać 20 losowo wygenerowanych wartości na każdej liście. wygenerowana wartość może mieścić się w zakresie od 0 do 5
s =[] as Set
l =[]
max =5
print "random Numbers :"20.times{
e =(int)Math.random()*max
s << e
l << e
print "$e, "}
println "\n"
println "Set : $s "
println "list : $l
Zestaw:
zestaw nie może mieć zduplikowanych elementów w swoich kolekcjach. jest to również kolekcja nieuporządkowana. Aby uzyskać dostęp do danych z zestawu, należy użyć tylko iteratora, a pobieranie na podstawie indeksu nie jest możliwe. Stosuje się go głównie wtedy, gdy jest wymagana kolekcja wyjątkowości.
Lista:
lista może zawierać zduplikowane elementy, z naturalnym uporządkowaniem w trakcie wstawiania. W ten sposób można wyszukiwać dane na podstawie indeksu lub iteratora. Jest szeroko stosowany do przechowywania kolekcji, która wymaga dostępu na podstawie indeksu.
Właśnie przejrzałem najważniejszy temat Javy zwany kolekcjami Framework. Chciałem podzielić się z Wami moją małą wiedzą na temat Kolekcji. Najważniejszym tematem jest lista, zestaw, mapa. Zacznijmy od List and Set.
Różnica między listą a zestawem:
List jest klasą kolekcji, która rozszerza AbstractListklasę, gdzie jako Set jest klasą kolekcji, która rozszerza AbstractSetklasę, ale oba implementują interfejs Collection.
Interfejs listy pozwala na duplikowanie wartości (elementów), podczas gdy interfejs Set nie pozwala na duplikowanie wartości. W przypadku zduplikowanych elementów w zestawie zastępuje starsze wartości.
Interfejs listy dopuszcza wartości NULL, przy czym interfejs Set nie dopuszcza wartości NULL. W przypadku użycia wartości Null w Set daje NullPointerException.
Interfejs listy utrzymuje porządek wstawiania. Oznacza to sposób dodawania elementów na liście w taki sam sposób, w jaki uzyskujemy je za pomocą iteratora lub dla każdego stylu. Podczas gdy Setimplementacje niekoniecznie utrzymują porządek wstawiania. (Mimo SortedSetże używa TreeSeti LinkedHashSetutrzymuje kolejność wstawiania).
Interfejs listy ma zdefiniowane własne metody, natomiast interfejs Set nie ma własnej metody, dlatego Set używa tylko metod interfejsu Collection.
Interfejs listy ma jedną klasę zwaną, Vectorpodczas gdy interfejs Set nie ma żadnej klasy starszej
Last but not not least ... listIterator()Metodę można wykorzystać tylko do przełączania elementów w klasach list, podczas gdy możemy użyć metody iterator (), aby uzyskać dostęp do elementów klasy Set
Z jednej strony, Listi Setto interfejsy które również posiadają „baza” implementacje w formie abstrakcyjnej klasy (którego wspomniana). Ponadto nr 3 jest całkowicie niedokładny , ponieważ większość zestawów dopuszcza wartości zerowe (ale zależne od implementacji). Nie rozumiem # 5 i # 7, a dla # 6 Vectornie jest starsza, ale jest po prostu zsynchronizowany i nie jest preferowany do użycia, z wyjątkiem sytuacji, gdy wymagana jest synchronizacja.
glen3b
-3
Zestaw:
Nie może mieć zduplikowanych wartości Kolejność zależy od implementacji. Domyślnie nie jest uporządkowane. Nie można uzyskać dostępu według indeksu
Lista:
Może mieć zduplikowane wartości Domyślnie uporządkowane Może mieć dostęp według indeksu
Odpowiedzi:
List
jest uporządkowaną sekwencją elementów, podczas gdySet
jest wyraźną listą elementów, która jest nieuporządkowana (dziękuję, Quinn Taylor ).List<E>:
Set<E>:
źródło
źródło
Uporządkowane listy elementów (unikalne lub nie)
Zgodne z interfejsem Java o nazwie
List
Można uzyskać dostęp przez indeks
zaimplementowano za pomocą
Wykazy unikalnych elementów:
Zgodne z interfejsu Java o nazwie
Set
może nie być dostępne przez indeks
zaimplementowano za pomocą
Oba interfejsy
Set
iList
są zgodne z interfejsem Java o nazwieCollection
źródło
Zestaw nie może zawierać zduplikowanych elementów, podczas gdy lista może. Lista (w Javie) oznacza również porządek.
źródło
Pod względem koncepcyjnym zwykle mówimy o nieuporządkowanym grupowaniu, które zezwala na duplikaty jako worek, a nie zezwala na duplikaty, to zestaw.
źródło
Lista
Zestaw
źródło
Lista:
List
Na ogół zezwalają na powielanie obiektów.List
s muszą być zamawiane i dlatego są dostępne według indeksu.Klasy wdrożeniowe obejmują:
ArrayList
,LinkedList
,Vector
Zestaw:
Set
s ma nie dopuszczać duplikaty obiektów. Większość implementacji jest nieuporządkowana, ale jest specyficzna dla implementacji.Klasy implementacji obejmują:
HashSet
(nieuporządkowany),LinkedHashSet
(uporządkowany),TreeSet
(uporządkowany według porządku naturalnego lub dostarczonego komparatora)źródło
Skoro mówimy o interfejsach Java, dlaczego nie spojrzeć na Javadoc?!
List
jest uporządkowaną kolekcją (sekwencją), która zazwyczaj pozwala na duplikatySet
to kolekcja, która nie zawiera zduplikowanych elementów, kolejność iteracji może być zagwarantowana przez implementacjęNie ma wzmianki o braku porządku w zestawach: zależy to od implementacji.
źródło
LinkedHashSet
się lewej strony, jeśli kod zależy od zamówienia później. Używam go tylkoSet
wtedy, gdy naprawdę go używam, ponieważ nie można założyć, że podstawowa implementacja jest podobna,LinkedHashSet
może być dzisiaj, ale jutro kod się zmieni i zawiedzie.To może nie być odpowiedź, której szukasz, ale JavaDoc klas kolekcji jest w rzeczywistości dość opisowy. Skopiuj / wklej:
źródło
Zestaw to nieuporządkowana grupa odrębnych obiektów - niedozwolone są duplikaty obiektów. Zasadniczo jest to realizowane za pomocą kodu skrótu wstawianych obiektów. (Określone implementacje mogą dodawać kolejność, ale sam interfejs Set nie.)
Lista to uporządkowana grupa obiektów, która może zawierać duplikaty. To może być realizowane ze związkiem
ArrayList
,LinkedList
itpźródło
List
nie zamówiono 😕Lista:
Lista umożliwia duplikowanie elementów i wartości zerowych. Łatwe wyszukiwanie za pomocą odpowiedniego indeksu elementów, a także wyświetla elementy w kolejności wstawiania. Przykład: (linkedlist)
Wynik:
1
1
555
333
888
555
null
null
Wartość: 1
Wartość: 555
Wartość: 333
Wartość: 888
Wartość: 555
Wartość: null
Wartość: null
Zestaw:
zestaw nie zezwala na żadne zduplikowane elementy i pozwala na pojedynczą pustą wartość. Nie będzie utrzymywał żadnej kolejności wyświetlania elementów. Tylko
TreeSet
będzie wyświetlany w kolejności rosnącej.Przykład: (TreeSet)
Wynik:
all
hello
welcome
world zestaw
java.lang.NullPointerException
nie zezwala na wartość zerową ani na zduplikowaną wartość
źródło
1.Lista zezwala na duplikaty wartości, a zestaw nie zezwala na duplikaty
2.Lista zachowuje kolejność, w której elementy zostały wstawione do listy Zestaw nie zachowuje kolejności. 3.Lista jest uporządkowaną sekwencją elementów, natomiast Set jest odrębną listą elementów, która jest nieuporządkowana.
źródło
Zestaw Vs Set
1) Zestaw nie zezwala na duplikaty. Lista pozwala na duplikowanie. W oparciu o implementację Seta, zachowuje także kolejność wstawiania.
np
LinkedHashSet
. : Utrzymuje kolejność wprowadzania. Proszę kliknąć tutaj2) zawiera metodę. Z natury zestawu zapewni lepszą wydajność dostępu. Najlepszy przypadek to o (1). Ale List ma problem z wydajnością do wywołania
contains
.źródło
Wszystkie
List
klasy zachowują kolejność wstawiania. Używają różnych implementacji opartych na wydajności i innych cechach (np.ArrayList
Dla szybkości dostępu do określonego indeksu,LinkedList
po prostu utrzymania porządku). Ponieważ nie ma klucza, duplikaty są dozwolone.Na
Set
zajęcia nie utrzymują kolejność wstawiania. Mogą opcjonalnie narzucić określoną kolejność (jak w przypadkuSortedSet
), ale zazwyczaj mają kolejność zdefiniowaną w implementacji na podstawie niektórych funkcji skrótu (jak w przypadkuHashSet
). PonieważSet
s są dostępne za pomocą klucza, duplikaty nie są dozwolone.źródło
Zamawianie ... lista ma porządek, zestaw nie.
źródło
Kilka godnych uwagi różnic między Listą a Setem w Javie podano w następujący sposób:
1) Podstawowa różnica między List a Set w Javie pozwala na duplikowanie elementów. Lista w Javie zezwala na duplikaty, a Set nie zezwala na żadne duplikaty. Jeśli wstawisz duplikat w zestawie, zastąpi on starszą wartość. Każda implementacja Set w Javie będzie zawierała tylko unikalne elementy.
2) Kolejną znaczącą różnicą między List a Set w Javie jest kolejność. Lista jest zbiorem uporządkowanym, a Set jest zbiorem nieuporządkowanym. Lista zachowuje kolejność wstawiania elementów, oznacza to, że każdy element wstawiony wcześniej przejdzie na niższy indeks niż jakikolwiek element wstawiony później. Ustawiony w Javie nie utrzymuje żadnej kolejności. Chociaż zestaw zapewnia kolejną alternatywę o nazwie SortedSet, która może przechowywać elementy zestawu w określonej kolejności sortowania zdefiniowanej metodami Porównywalne i Porównawcze obiektów przechowywanych w zestawie.
3) Popularna implementacja interfejsu List w Javie obejmuje ArrayList, Vector i LinkedList. Podczas gdy popularna implementacja interfejsu Set obejmuje HashSet, TreeSet i LinkedHashSet.
Jest całkiem jasne, że jeśli chcesz zachować kolejność wstawiania lub obiekt, a Twoja kolekcja może zawierać duplikaty, List jest dobrym rozwiązaniem. Z drugiej strony, jeśli twoim wymogiem jest utrzymanie unikalnej kolekcji bez duplikatów, Set jest dobrym rozwiązaniem.
źródło
Lista:
Zestaw:
źródło
Set<E>
iList<E>
oba służą do przechowywania elementów typuE
. Różnica polega na tym, żeSet
jest przechowywana w nieuporządkowany sposób i nie pozwala na duplikowanie wartości.List
służy do przechowywania elementów w uporządkowany sposób i pozwala na duplikowanie wartości.Set
do elementów nie można uzyskać dostępu za pomocą pozycji indeksu, a doList
elementów można uzyskać dostęp za pomocą pozycji indeksu.źródło
Cześć Tak wiele odpowiedzi jest już podanych .. Pozwól mi wskazać kilka punktów, które nie zostały jeszcze wspomniane:
RandomAccess
interfejs, który jest interfejsem znacznika dla szybszego dostępu. Żadna z implementacji Seta tego nie robi.ListIterator
który obsługuje iterację w obu kierunkach . Zestaw używa Iteratora, który obsługuje tylko iterację jednokierunkowąźródło
Największy inny to podstawowa koncepcja.
Z interfejsu Set and List . Zestaw to koncepcja matematyki. Metoda set rozszerza kolekcję. Nie dodawaj jednak nowej metody. size () oznacza liczność (więcej to BitSet.cardinality, Licznik liniowy, Log Log, HyperLogLog ). addAll () oznacza union. retainAll () oznacza skrzyżowanie. removeAll () oznacza różnicę.
Wymień jednak brak tych pojęć. Lista dodaje wiele metod do obsługi koncepcji sekwencji, których interfejs kolekcji nie zapewnia. podstawową koncepcją jest INDEKS . jak add (indeks, element), get (indeks), search (indexOf ()), remove (indeks) element. Lista zawiera również podlistę „ Widok kolekcji ” . Zestaw nie ma widoku. nie mają dostępu pozycyjnego. Lista zawiera również wiele algorytmów w klasie Kolekcje . sort (lista), binarySearch (lista), wstecz (lista), losowanie (lista), fill (lista). Params metody to interfejs listy . zduplikowane elementy są tylko wynikiem pojęć. nie zasadnicza różnica.
Zatem zasadniczą różnicą jest koncepcja. Zestaw to koncepcja zestawu matematyki. Lista jest pojęciem sekwencji.
źródło
Oto wyraźny przykład z groovy. tworzę zestaw i listę. następnie próbuję zapisać 20 losowo wygenerowanych wartości na każdej liście. wygenerowana wartość może mieścić się w zakresie od 0 do 5
Wynik :
losowe liczby:
4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3
Zestaw:
[4, 1, 0, 2, 3]
lista:
[4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3]
Widać różnicę:
źródło
Podobnie jak odpowiedź, ponieważ SET nie ma zduplikowanej wartości, a List może. Oczywiście kolejność to kolejna rzecz, która odróżnia je od siebie.
źródło
Zestaw: zestaw nie może mieć zduplikowanych elementów w swoich kolekcjach. jest to również kolekcja nieuporządkowana. Aby uzyskać dostęp do danych z zestawu, należy użyć tylko iteratora, a pobieranie na podstawie indeksu nie jest możliwe. Stosuje się go głównie wtedy, gdy jest wymagana kolekcja wyjątkowości.
Lista: lista może zawierać zduplikowane elementy, z naturalnym uporządkowaniem w trakcie wstawiania. W ten sposób można wyszukiwać dane na podstawie indeksu lub iteratora. Jest szeroko stosowany do przechowywania kolekcji, która wymaga dostępu na podstawie indeksu.
źródło
TEMAT Nazwa: Lista VS Zestaw
Właśnie przejrzałem najważniejszy temat Javy zwany kolekcjami Framework. Chciałem podzielić się z Wami moją małą wiedzą na temat Kolekcji. Najważniejszym tematem jest lista, zestaw, mapa. Zacznijmy od List and Set.
Różnica między listą a zestawem:
List jest klasą kolekcji, która rozszerza
AbstractList
klasę, gdzie jako Set jest klasą kolekcji, która rozszerzaAbstractSet
klasę, ale oba implementują interfejs Collection.Interfejs listy pozwala na duplikowanie wartości (elementów), podczas gdy interfejs Set nie pozwala na duplikowanie wartości. W przypadku zduplikowanych elementów w zestawie zastępuje starsze wartości.
Interfejs listy dopuszcza wartości NULL, przy czym interfejs Set nie dopuszcza wartości NULL. W przypadku użycia wartości Null w Set daje
NullPointerException
.Interfejs listy utrzymuje porządek wstawiania. Oznacza to sposób dodawania elementów na liście w taki sam sposób, w jaki uzyskujemy je za pomocą iteratora lub dla każdego stylu. Podczas gdy
Set
implementacje niekoniecznie utrzymują porządek wstawiania. (MimoSortedSet
że używaTreeSet
iLinkedHashSet
utrzymuje kolejność wstawiania).Interfejs listy ma zdefiniowane własne metody, natomiast interfejs Set nie ma własnej metody, dlatego Set używa tylko metod interfejsu Collection.
Interfejs listy ma jedną klasę zwaną,
Vector
podczas gdy interfejs Set nie ma żadnej klasy starszejLast but not not least ...
listIterator()
Metodę można wykorzystać tylko do przełączania elementów w klasach list, podczas gdy możemy użyć metody iterator (), aby uzyskać dostęp do elementów klasy SetCzy możemy jeszcze coś dodać? Proszę daj mi znać.
Dzięki.
źródło
List
iSet
to interfejsy które również posiadają „baza” implementacje w formie abstrakcyjnej klasy (którego wspomniana). Ponadto nr 3 jest całkowicie niedokładny , ponieważ większość zestawów dopuszcza wartości zerowe (ale zależne od implementacji). Nie rozumiem # 5 i # 7, a dla # 6Vector
nie jest starsza, ale jest po prostu zsynchronizowany i nie jest preferowany do użycia, z wyjątkiem sytuacji, gdy wymagana jest synchronizacja.Zestaw:
Nie może mieć zduplikowanych wartości Kolejność zależy od implementacji. Domyślnie nie jest uporządkowane. Nie można uzyskać dostępu według indeksu
Lista:
Może mieć zduplikowane wartości Domyślnie uporządkowane Może mieć dostęp według indeksu
źródło