2010-12-11 4 views
-1

У меня есть сомнения относительно hashset. Почему Hashset не использует повторяющиеся элементы? Я знаю, что он реализует интерфейс Set и помещает значения в хэш-таблицу. Я имею в виду, что может быть кодом, написанным внутри, чтобы не принимать повторяющиеся значения?Почему Hashset не принимает повторяющиеся значения?

ответ

7

Именно по той причине, вы уже упоминалось, HashSet реализует интерфейс Set:

Set

Коллекция, которая не содержит дубликатов элементов. Более формально, наборов не содержат пары элементов e1 и e2 таких, что e1.equals (e2) и в наиболее один нулевой элемент. Как видно из названия , этот интерфейс моделирует математическую абстрактную абстракцию .

Вы хотите дублировать? Используйте List.

+0

Если он использует собственный тип данных, он может переопределить 'hashCode()', чтобы возвращать разные значения для подобных экземпляров (хотя и нестандартно) .... будет по-прежнему работать с 'Set' – st0le

+0

@ st0le, что вы означают похожие случаи? вы имеете в виду случаи, которые должны при нормальных обстоятельствах быть равными? Если это так, то вы настраиваете себя на огромные ошибки в своей программе, если вы также переопределите метод equals, который вам нужно. –

+0

, конечно, вот что я имел в виду ... не совсем лучший способ. : P – st0le

0

Потому что, по определению, набор - это вещь, которая не содержит дубликатов.

-2

HashSet не позволяет дублировать значения, потому что класс HashSet содержит метод add(), он будет проверять до добавления элементов внутри HashSet. если мы пытаемся добавить повторяющиеся значения, он возвращает false, поэтому не разрешается.

здесь настоящий, e оба равные возвращает false. Object PRESENT; public boolean add(E e) { return map.put(e, PRESENT)==null; }