Я не понял смысл Maps на Java. Когда рекомендуется использовать карту вместо списка?
спасибо заранее,
nohereman
Я не понял смысл Maps на Java. Когда рекомендуется использовать карту вместо списка?
спасибо заранее,
nohereman
Карта Java: объект, который сопоставляет ключи значениям. Карта не может содержать дубликаты ключей; каждый ключ может отображать не более одного значения.
Список Java: упорядоченная коллекция (также известная как последовательность). Пользователь этого интерфейса имеет точный контроль над тем, где в списке вставлен каждый элемент. Пользователь может обращаться к элементам по их целочисленному индексу (положению в списке) и искать элементы в списке.
Разница в том, что они разные. Карта - это отображение ключа/значений, списка списка элементов.
Скажите, что у вас есть группа студентов с именами и идентификаторами учеников. Если вы поместите их в список, единственный способ найти ученика со студентом_id = 300 - это посмотреть на каждый элемент списка по одному за раз, пока не найдете подходящего ученика.
С помощью карты вы связываете каждый идентификатор студента и экземпляр студента. Теперь вы можете сказать: "Принесите мне 300 студентов" и немедленно верните этого ученика.
Используйте карту, когда вам нужно выбрать конкретных членов из коллекции. Используйте список, если нет смысла это делать.
Скажем, у вас были точно такие же экземпляры учеников, но ваша задача заключалась в подготовке отчета обо всех именах учеников. Вы бы поместили их в Список, так как нет необходимости выбирать и выбирать отдельных учеников и, следовательно, нет необходимости в карте.
Вероятно, это хорошая идея пересмотреть Random Access Vs Последовательный Доступ Структуры данных. Они оба имеют разные сложности времени выполнения и подходят для разных типов контекстов.
Зависит от ваших проблем с производительностью. Карта более явно HashMap гарантирует O (1) на вставках и удаляет. A List имеет наихудшее значение O (n), чтобы найти элемент. Поэтому, если бы вы были настолько любезны, чтобы подробно рассказать о своем сценарии, мы можем помочь больше.
Карта используется как ассоциация ключа и значения. Со списком у вас есть только значения.
Индексы в списке всегда являются int, тогда как в Map вы можете иметь другой объект в качестве ключа.
Ресурсы:
Я думаю, что это вопрос о том, как вы хотите получить доступ к своим данным. С помощью карты вы можете "напрямую" получить доступ к своим элементам с помощью известного ключа, в списке вам придется его искать, evan, если его отсортировать.
Для сравнения:
List<MyObject> list = new ArrayList<MyObject>();
//Fill up the list
// Want to get object "peter"
for( MyObject m : list ) {
if( "peter".equals( m.getName() ) {
// found it
}
}
На карте вы можете просто ввести
Map<String, MyObject> map = new HashMap<String, MyObject>();
// Fill map
MyObject getIt = map.get("peter");
Если у вас есть данные для обработки и их нужно делать со всеми объектами, список - это то, что вы хотите. Если вы хотите обрабатывать отдельные объекты с хорошо известным ключом, карта лучше. Это не полный ответ (только мои 2...), но я надеюсь, что это может вам помочь.
Если вы хотите отобразить вместо списка. Имена этих интерфейсов имеют смысл, и вы не должны игнорировать его.
Используйте карту, когда вы хотите, чтобы ваша структура данных представляла отображение для ключей значений. Используйте список, когда вы хотите, чтобы ваши данные сохранялись в произвольном, упорядоченном формате.
Map
и List
служат для разных целей.
List
содержит набор элементов. Заказывается (вы можете получить товар по индексу).
Map
содержит значение key → value. Например. карта человека на позицию: "JBeg" → "программист". И это неупорядочено. Вы можете получить значение по ключу, но не по индексу.
Карты хранят объекты данных с уникальными ключами, поэтому обеспечивают быстрый доступ к хранимым объектам. Вы можете использовать ConcurrentHashMap для достижения параллелизма в многопоточных средах. Принимая во внимание, что списки могут хранить повторяющиеся данные, и вам нужно перебирать элементы данных, чтобы получить доступ к конкретному элементу, поэтому обеспечить медленный доступ к хранимым объектам. Вы можете выбрать любую структуру данных в зависимости от ваших требований.