Ошибка в LinkedHashSet Javadoc? - PullRequest
       74

Ошибка в LinkedHashSet Javadoc?

0 голосов
/ 03 февраля 2011

Может быть, я привередлив, но в javadoc есть следующая информация о реализации LinkedHashSet:

Эта реализация отличается от HashSet в том, что он поддерживает двусвязный список, проходящий через все его записи.

Я не могу найти двойной список в классе LinkedHashSet. Может кто-нибудь помочь?

Ответы [ 2 ]

6 голосов
/ 03 февраля 2011

Двусвязный список находится на стороне реализации, не обязательно для вас, чтобы получить и использовать.

Хранит двусвязный список, чтобы можно было отслеживать порядок вставки ваших элементов в набор (а также порядок доступа к элементам в порядке доступа LinkedHashMaps ).Обычный HashSet не нуждается в двусвязном списке, так как он не гарантирует порядок его содержимого.

Они, вероятно, включили этот бит в javadoc, просто чтобы вы знали, как они это сделали, ичто за кулисами с LinkedHashSet происходит немного больше, чем с обычным HashSet.

Вы можете взглянуть на исходный код на Поиск кода Google (вы заметите, чтоLinkedHashSet на самом деле просто обернут вокруг LinkedHashMap , но это не очень важная деталь).

В конце концов, это не ошибка в Javadocs, и вы не должны беспокоиться о фактесуществует список с двумя связями, работающий в LinkedHashSet и LinkedHashMap.Мы можем просто весело воспользоваться преимуществом порядка вставки LinkedHashMap, не обращая внимания на то, что происходит за кулисами.

4 голосов
/ 03 февраля 2011

Да, это немного шатко, когда вы смотрите на источник без детализации.Обратите внимание, что он вызывает защищенный пакетом конструктор HashSet, который принимает бессмысленное логическое значение dummy:

public LinkedHashSet(int initialCapacity, float loadFactor) {
    super(initialCapacity, loadFactor, true);
}

, которое затем использует LinkedHashMap вместо HashMap для поддержки набора.По сути, LinkedHashSet фактически находится внутри HashSet, он просто защищен пакетом, поэтому для его использования необходимо использовать LinkedHashSet.

...