Когда использовать HashMap поверх LinkedList или ArrayList и наоборот - PullRequest
68 голосов
/ 02 ноября 2011

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

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

Ответы [ 2 ]

90 голосов
/ 02 ноября 2011

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

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

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

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

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

    // 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);  

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

30 голосов
/ 02 ноября 2011

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

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

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

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