Какова фактическая структура данных, используемая для осуществления сбора и их порядка? - PullRequest
0 голосов
/ 25 апреля 2010

В Java используются разные коллекции, такие как hashtable, hashset, vector, treeset, treemap и hashmap. Как они реализуются внутри? Какова фактическая структура данных, используемая для этой коллекции? И что такое заказ?

Было бы хорошо, если мы немного поговорим о реализации коллекции.

Ответы [ 4 ]

1 голос
/ 25 апреля 2010

Существует этот метод Collections.sort(), который внутренне вызывает Arrays.sort(). Это использует сортировку слиянием для сортировки данных, которые имеют порядок O (nlogn). И еще одна информация: если количество сортируемых элементов меньше 7, используется сортировка вставки.

Как и в случае Vector и ArrayList, ниже приведены сложности, поскольку он использует простой массив

  • get (index) - O (1)
  • add (Объект) - O (n)
  • insertAt (int pos, Object value) - O (n)
  • удалить (Объект) - O (n)

Еще одна вещь состоит в том, что HashSet внутренне использует HashMap, заботясь только о ключах карты и об объектах, которые игнорируются или не используются, так что нет двух разных реализаций. И HashMap использует бесстолкновительное или идеальное хеширование, генерируя уникальные хеш-коды для каждого объекта. Итак, в идеале порядок будет 1 для вставки и извлечения данных.

Часто в коллекциях Java, особенно в списках, существует обычное сравнение между двумя конкретными реализациями, ArrayList и LinkedList. Порядок LinkedList выглядит следующим образом.

  • get (index) - O (n)
  • add (Object) - O (1) (при условии, что в связанном списке сохраняется готовый последний указатель)
  • insertAt (int pos, Object value) - O (n)
  • удалить (Объект) - O (n)
0 голосов
/ 25 апреля 2010

По заказу нахожу что-то полезное:

Я нашел пост ниже очень полезным в отношении обозначения Big O: Сводка Big-O для реализаций Java Collections Framework?

и в точном ниже веб-странице http://simplenotions.wordpress.com/2009/05/13/java-standard-data-structures-big-o-notation/

ниже детали о результатах эксперимента для каждой коллекции http://java.sun.com/docs/books/performance/1st_edition/html/JPAlgorithms.fm.html

0 голосов
/ 25 апреля 2010

Вы можете найти это с подсветкой .

0 голосов
/ 25 апреля 2010

Классы реализации коллекций названы точно в соответствии со своими структурами данных. Таким образом, HashSet и HashMap использовали хэш в качестве базовой структуры данных, в то время как TreeSet и TreeMap используют двоичное дерево.

Дополнительная информация доступна в JavaDoc этих классов. Например, для TreeSet указано:

Эта реализация обеспечивает гарантированную стоимость журнала (n) для основных операций (добавление, удаление и хранение).

...