В чем разница между коллекцией и списком в Java?

153

В чем разница между Collectionи Listв Java? Когда я должен использовать что?

Чыонг Ха
источник
открытый интерфейс Список расширяет коллекцию {}
rai.skumar

Ответы:

263

Во-первых: а Listесть Collection. Это специализированный Collection, однако.

А Collectionэто просто: коллекция предметов. Вы можете добавлять вещи, удалять вещи, перебирать вещи и запрашивать, сколько там вещей.

A Listдобавляет к ней информацию об определенной последовательности вещей: вы можете получить элемент в позиции n , вы можете добавить элемент в позиции n , вы можете удалить элемент в позиции n .

В a Collectionвы не можете сделать это: «5-й элемент в этой коллекции» не определен, потому что нет определенного порядка.

Существуют и другие специализированные коллекции, например, a, Setдобавляющая возможность, что она никогда не будет содержать один и тот же элемент дважды.

Йоахим Зауэр
источник
9
да, список - это упорядоченная специализация коллекции (но не отсортированная) +1
атаманроман
2
Список в java расширяет интерфейс Collections и создает индексированные функции, которые помогают при поиске и удалении на основе позиции
frictionlesspulley
188

Collectionявляется корневым интерфейсом к иерархии java Collections. Listодин подчиненный интерфейс, который определяет упорядоченную коллекцию, другие подчиненные интерфейсы, как Queueправило, будут хранить элементы, готовые для обработки (например, стек ).

Следующая диаграмма демонстрирует взаимосвязь между различными типами коллекций Java:

коллекции java

Крок
источник
1
Очень похоже на ваш имидж, я видел его, когда готовился к SCJP, но почти забыл все эти вещи в наши дни.
Чыонг Ха
1
Я должен признать, что это изображение было украдено из этого блога . Я тоже впервые увидел такую ​​диаграмму в книге K & B SCJP .
Крок
Вы можете многому научиться из сертификата scjp, большинство книг на эту тему просто потрясающие :)
atamanroman
Я думаю, Mapэто не так Collection.
Джаннис Кристофакис
7

Java API - лучший ответ на этот вопрос

Коллекция

Корневой интерфейс в иерархии коллекции. Коллекция представляет собой группу объектов, известных как ее элементы. Некоторые коллекции допускают дублирование элементов, а другие - нет. Некоторые заказаны, а другие не заказаны. JDK не предоставляет каких-либо прямых реализаций этого интерфейса: он предоставляет реализации более конкретных подынтерфейсов, таких как Set и List. Этот интерфейс обычно используется для передачи коллекций и манипулирования ими там, где требуется максимальная универсальность.

Список (расширяет коллекцию)

Упорядоченная коллекция (также известная как последовательность). Пользователь этого интерфейса имеет точный контроль над тем, где в списке каждый элемент вставлен. Пользователь может получить доступ к элементам по их целочисленному индексу (позиции в списке) и искать элементы в списке.

В отличие от наборов, списки обычно допускают дублирование элементов. Более формально, списки обычно допускают пары элементов e1 и e2, например e1.equals (e2), и они обычно допускают множественные нулевые элементы, если они вообще допускают нулевые элементы. Не исключено, что кто-то захочет реализовать список, который запрещает дублирование, создавая исключения времени выполнения, когда пользователь пытается вставить их, но мы ожидаем, что такое использование будет редким.

Евгений Рыжиков
источник
3

Список и Набор - два подкласса Коллекции.

В списке данные располагаются в определенном порядке.

В Set он не может содержать одни и те же данные дважды.

В Collection он просто хранит данные без определенного порядка и может содержать повторяющиеся данные.

Neeraj Bansal
источник
2

Коллекция - это высокоуровневый интерфейс, описывающий объекты Java, который может содержать коллекции других объектов. Не очень конкретно о том, как к ним осуществляется доступ, могут ли несколько копий одного и того же объекта существовать в одной коллекции или важен ли порядок. Список специально заказан коллекция объектов. Если вы поместите объекты в Список в определенном порядке, они останутся в этом порядке.

И решить, где использовать эти два интерфейса, гораздо менее важно, чем решить, какую конкретную реализацию вы используете. Это повлияет на время и пространство вашей программы. Например, если вам нужен список, вы можете использовать ArrayList или LinkedList, каждый из которых будет иметь значение для приложения. Для других типов коллекций (например, Наборы) применяются аналогичные соображения.

Джан
источник
2

Коллекция - это супер интерфейс List, поэтому каждый список Java также является экземпляром коллекции. Коллекции могут повторяться только последовательно (и в произвольном порядке), тогда как List обеспечивает доступ к элементу в определенной позиции с помощью get(int index)метода.

Дафф
источник
2

Коллекция - это основной интерфейс иерархии Java-коллекций, а List (последовательность) - один из подчиненных интерфейсов, который определяет упорядоченную коллекцию.

Ramya
источник