Jaka jest różnica między kolekcją a listą w języku Java?

153

Jaka jest różnica między Collectioniw Listjęzyku Java? Kiedy należy użyć którego?

Truong Ha
źródło
Public interface Lista rozszerza kolekcję {}
rai.skumar

Odpowiedzi:

263

Po pierwsze: a Listjest Collection. Jest to jednak specjalizacja Collection.

A Collectionto po prostu: zbiór przedmiotów. Możesz dodawać rzeczy, usuwać je, iterować po nich i sprawdzać, ile jest tam rzeczy.

A Listdodaje do niego informację o zdefiniowanej sekwencji rzeczy: Możesz pobrać element na pozycji n , możesz dodać element na pozycji n , możesz usunąć element na pozycji n .

W a Collectionnie możesz tego zrobić: „piąty element w tej kolekcji” nie jest zdefiniowany, ponieważ nie ma zdefiniowanej kolejności.

Istnieją również inne wyspecjalizowane kolekcje, na przykład a, Setktóre dodają funkcję, że nigdy nie będą zawierać dwukrotnie tego samego elementu.

Joachim Sauer
źródło
9
tak, lista jest uporządkowaną specjalizacją w zbieraniu (ale nie posortowaną) +1
atamanroman
2
Lista w java rozciąga Kolekcje interfejs i buduje indeksowanych funkcje, które pomagają w pozycji opartych pobierania i usuwania zachowań
frictionlesspulley
188

Collectionjest głównym interfejsem hierarchii kolekcji java. Listto jeden interfejs podrzędny, który definiuje uporządkowaną kolekcję, inne interfejsy podrzędne to Queuezazwyczaj przechowujące elementy gotowe do przetwarzania (np. stos ).

Poniższy diagram ilustruje relacje między różnymi typami kolekcji Java:

kolekcje java

krock
źródło
1
Naprawdę podoba mi się twój wizerunek, widziałem go przygotowując się do SCJP, ale ostatnio prawie zapomniałem o tym wszystkim.
Truong Ha
1
Muszę przyznać, że ten obrazek został wykręcony z tego bloga . Ja też pierwszy raz zobaczyłem taki diagram w książce K&B SCJP .
krock
możesz się wiele nauczyć z certyfikatu scjp, większość książek na ten temat jest niesamowita :)
atamanroman
Myślę, że Mapnie jest Collection.
giannis christofakis
7

Najlepszą odpowiedzią na to jest Java API

Kolekcja

Główny interfejs w hierarchii kolekcji. Kolekcja reprezentuje grupę obiektów nazywanych jej elementami. Niektóre kolekcje zezwalają na zduplikowane elementy, a inne nie. Niektóre są uporządkowane, a inne nieuporządkowane. JDK nie zapewnia żadnych bezpośrednich implementacji tego interfejsu: zapewnia implementacje bardziej szczegółowych podinterfejsów, takich jak Set i List. Ten interfejs jest zwykle używany do przekazywania kolekcji i manipulowania nimi tam, gdzie wymagana jest maksymalna ogólność.

Lista (rozszerza kolekcję)

Uporządkowana kolekcja (nazywana również sekwencją). Użytkownik tego interfejsu ma precyzyjną kontrolę nad tym, gdzie na liście wstawiany jest każdy element. Użytkownik może uzyskiwać dostęp do elementów według ich indeksu liczb całkowitych (pozycja na liście) i wyszukiwać elementy na liście.

W przeciwieństwie do zestawów listy zazwyczaj pozwalają na zduplikowane elementy. Bardziej formalnie, listy zazwyczaj dopuszczają pary elementów e1 i e2, takie jak e1.equals (e2), i zazwyczaj dopuszczają wiele elementów zerowych, jeśli w ogóle dopuszczają elementy zerowe. Nie jest wykluczone, że ktoś mógłby 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.

Eugene Ryzhikov
źródło
3

Lista i zestaw to dwie podklasy kolekcji.

Na liście dane są w określonej kolejności.

W zestawie nie może zawierać dwukrotnie tych samych danych.

W kolekcji po prostu przechowuje dane bez określonej kolejności i może zawierać zduplikowane dane.

Neeraj Bansal
źródło
2

Kolekcja to interfejs wysokiego poziomu opisujący obiekty Java, które mogą zawierać kolekcje innych obiektów. Nie jest bardzo szczegółowe, w jaki sposób uzyskuje się do nich dostęp, czy wiele kopii tego samego obiektu może istnieć w tej samej kolekcji lub czy kolejność jest ważna. Lista jest konkretnie uporządkowaną kolekcją obiektów. Jeśli umieścisz obiekty na liście w określonej kolejności, pozostaną w tej kolejności.

A decyzja, gdzie użyć tych dwóch interfejsów, jest znacznie mniej ważna niż decyzja, jaka jest konkretna implementacja, której używasz. Będzie to miało wpływ na wydajność programu w czasie i przestrzeni. Na przykład, jeśli chcesz mieć listę, możesz użyć ArrayList lub LinkedList, z których każdy będzie miał wpływ na aplikację. W przypadku innych typów kolekcji (np. Zestawów) obowiązują podobne kwestie.

Gian
źródło
2

Kolekcja jest super interfejsem List, więc każda lista Java jest również instancją kolekcji. Kolekcje są iterowalne tylko sekwencyjnie (i bez określonej kolejności), podczas gdy lista umożliwia dostęp do elementu w określonej pozycji za pomocą get(int index)metody.

Daff
źródło
2

Kolekcja jest głównym interfejsem hierarchii kolekcji Java, a lista (sekwencja) jest jednym z interfejsów podrzędnych definiujących uporządkowaną kolekcję.

Ramya
źródło