Список против карты в Java - PullRequest
       9

Список против карты в Java

24 голосов
/ 22 сентября 2010

Я не понял, что такое Карты в Java.Когда рекомендуется использовать карту вместо списка?

заранее спасибо,

nohereman

Ответы [ 8 ]

38 голосов
/ 22 сентября 2010

Скажем, у вас есть группа студентов с именами и идентификационными номерами студентов.Если вы поместите их в список, единственный способ найти студента с student_id = 300 - это просматривать каждый элемент списка по одному, пока не найдете нужного студента.

С картойвы связываете ID каждого студента и экземпляр студента.Теперь вы можете сказать: «Принеси мне ученика 300» и немедленно верни этого ученика.

Используйте Карту, когда тебе нужно выбрать определенных членов из коллекции.Используйте Список, если в этом нет смысла.

Скажем, у вас были точно такие же экземпляры учеников, но ваша задача заключалась в том, чтобы составить отчет с именами всех учеников.Вы поместили бы их в список, поскольку не было бы необходимости выбирать отдельных учеников и, следовательно, не нужна карта.

21 голосов
/ 22 сентября 2010

Карта Java: объект, который сопоставляет ключи со значениями.Карта не может содержать дубликаты ключей;каждый ключ может отображать не более одного значения.

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

Разница в том, что они разные.Карта - это отображение ключа / значений, список списка элементов.

4 голосов
/ 22 сентября 2010

Это, вероятно, хорошая идея, чтобы пересмотреть Произвольный доступ Против Последовательный доступ Структуры данных . Они оба имеют разные сложности во время выполнения и подходят для разных типов контекстов.

3 голосов
/ 22 сентября 2010

Зависит от ваших проблем с производительностью. Карта более явно HashMap гарантирует O (1) на вставках и удалениях. Список имеет в худшем случае O (n), чтобы найти предмет. Поэтому, если вы будете так любезны, уточните, каков ваш сценарий, мы можем помочь больше.

2 голосов
/ 22 сентября 2010

Я думаю, что вопрос в том, как вы хотите получить доступ к вашим данным.С картой вы можете «напрямую» получить доступ к вашим предметам с помощью известного ключа, в списке вам придется искать его, evan, если он отсортирован.карту, которую вы можете просто набрать

Map<String, MyObject> map = new HashMap<String, MyObject>();
// Fill map
MyObject getIt = map.get("peter");

Если у вас есть данные для обработки, и вам все равно нужно делать это со всеми объектами, вам нужен список.Если вы хотите обрабатывать отдельные объекты с хорошо известным ключом, карта лучше.Это не полный ответ (только мои 2 ...), но я надеюсь, что это может помочь вам.

2 голосов
/ 22 сентября 2010

Карта используется как ассоциация ключа и значения.Со списком у вас есть в основном только значения.
Индексы в Списке всегда int, тогда как в Map вы можете иметь другой Объект в качестве ключа.


Ресурсы:

1 голос
/ 22 сентября 2010

Когда вы хотите отобразить вместо списка. Названия этих интерфейсов имеют значение, и вы не должны это игнорировать.

Используйте карту, когда вы хотите, чтобы ваша структура данных представляла сопоставление для ключей к значениям. Используйте список, если хотите, чтобы ваши данные хранились в произвольном упорядоченном формате.

0 голосов
/ 22 сентября 2010

Map и List служат разным целям.

List содержит коллекцию предметов. Заказано (вы можете получить товар по индексу).

Map содержит ключ сопоставления -> значение. Например. сопоставить человека с позицией: "JBeg" -> "программист". И это неупорядочено. Вы можете получить значение по ключу, но не по индексу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...