Подтвердить что ты не робот

Когда использовать HashMap поверх LinkedList или ArrayList и наоборот

В чем причина того, что мы не всегда можем использовать HashMap, хотя он намного эффективнее, чем ArrayList или LinkedList, в добавлении, удалении операций, независимо от количества элементов.

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

4b9b3361

Ответ 1

Списки представляют собой последовательный порядок элементов. Карты используются для представления набора пар ключ/значение.

Пока вы можете использовать карту в виде списка, есть некоторые определенные недостатки.

Поддержание порядка: - упорядочен список по определению. Вы добавляете элементы, а затем вы можете повторять их в списке в том порядке, в котором вы вставили элементы. Когда вы добавляете элементы в HashMap, вам не гарантируется получение элементов в том же порядке, в котором вы их помещаете. Существуют подклассы HashMap, такие как LinkedHashMap, которые будут поддерживать порядок, но в общем порядке не гарантируется карта.

Семантика ключа/значения: - Цель карты - хранить элементы на основе ключа, который может использоваться для извлечения элемента в более поздней точке. Подобная функциональность может быть достигнута только с помощью списка в ограниченном случае, когда ключ является позицией в списке.

Чтение кода Рассмотрим следующие примеры.

    // Adding to a List
    list.add(myObject);         // adds to the end of the list
    map.put(myKey, myObject);   // sure, you can do this, but what is myKey?
    map.put("1", myObject);     // you could use the position as a key but why?

    // Iterating through the items
    for (Object o : myList)           // nice and easy
    for (Object o : myMap.values())   // more code and the order is not guaranteed

Функциональность коллекции Некоторые функции полезности доступны для списков через класс Collections. Например...

    // Randomize the list
    Collections.shuffle(myList);

    // Sort the list
    Collections.sort(myList, myComparator);  

Надеюсь, что это поможет,

Ответ 2

Списки и карты - это разные структуры данных. Карты используются, когда вы хотите связать ключ со значением, а списки - упорядоченная коллекция.

Карта - это интерфейс в Java Collection Framework, а HashMap - это одна реализация интерфейса карты. HashMap эффективны для определения значения на основе ключа и вставки и удаления значений на основе ключа. Записи HashMap не упорядочены.

ArrayList и LinkedList - это реализация интерфейса List. LinkedList обеспечивает последовательный доступ и, как правило, более эффективен при вставке и удалении элементов в списке, однако он менее эффективен при доступе к элементам в списке. ArrayList обеспечивает произвольный доступ и более эффективен при доступе к элементам, но, как правило, медленнее при вставке и удалении элементов.