Как работает итератор в HashSet java

129
17 февраля 2022, 01:40

В LinkedHashSet есть хедер и там итератор по проходит по связному списку. Но в HashSet нет связного списка. Получается итератор просто по очереди проходит всю хэш таблицу?

Answer 1

HashSet реализован на основе HashMap, соответственно его iterator проходит по ключам этого мапа.

 public class HashSet<E>
     extends AbstractSet<E>
     implements Set<E>, Cloneable, java.io.Serializable {
     ...
     private transient HashMap<E,Object> map;
     ...
     /**
      * Returns an iterator over the elements in this set.  The elements
      * are returned in no particular order.
      *
      * @return an Iterator over the elements in this set
      * @see ConcurrentModificationException
      */
      public Iterator<E> iterator() {
         return map.keySet().iterator();
      }
 }

Что касается LinkedHashSet, то он наследует HashSet и не переопределяет iterator(), это означает, что работает все тот же метод. Да и сложно было ждать чего-то другого, iterator и должен перебирать всю коллекцию.

READ ALSO
Не могу понять,в чём ошибка

Не могу понять,в чём ошибка

Только начал изучать принципы "ООП"Хотел сделать программу, которая считывает символы, переводит их в смайликовый формат

122
Сериализация коллекции в Java

Сериализация коллекции в Java

Можно ли проводить сериализацию не объекта класса, а коллекции?

127
Рандомный генератор фраз/ошибка: cannot find symbol

Рандомный генератор фраз/ошибка: cannot find symbol

Проблема возникла со словами после знака присвоения

95
Программно изменить marginBottom кнопки android

Программно изменить marginBottom кнопки android

Программно создаю кнопки, но недавно понадобилось делать отступ вниз от каждой кнопкиЯ так понял надо задать layout_marginbottom

93