JavaRush /Java блог /Архив info.javarush /Вопрос по добавлению элементов в множество Set
ilia_ta
19 уровень
Москва

Вопрос по добавлению элементов в множество Set

Статья из группы Архив info.javarush
Здравствуйте! Недавно писал программу решения одной задачи в java, в ней в цикле шел перебор возможных решений. Решение представляет собой массив известной длины. Создал множество таких массивов solutions, в которое в цикле добавлял подходящие решения (они были в массиве sol): solutions.add(sol); Первое найденное решение добавлялось, а вот последующие уже нет. Первая мысль -- решение повторяется, но нет, они все оригинальные... Решения стали добавляется после добавления процедуры clone(): solutions.add(sol.clone()); Почему первый вариант команды не добавлял элементы, а второй -- добавлял?
Комментарии (6)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Byshevsky Уровень 16
12 марта 2016
буквально вчера читал Вопросы на собеседовании по коллекциям и там есть такое, может тебе поможет:
14. Почему нельзя использовать byte[] в качестве ключа в HashMap?
Как обычно, все оказалось довольно просто — хеш-код массива не зависит от хранимых в нем элементов, а присваивается при создании массива (метод вычисления хеш-кода массива не переопределен и вычисляется по стандартному Object.hashCode() на основании адреса массива). Так же у массивов не переопределен equals и выполняет сравнение указателей. Это приводит к тому, что обратиться к сохраненному с ключом-массивом элементу не получится при использовании другого массива такого же размера и с такими же элементами, доступ можно осуществить лишь в одном случае — при использовании той же самой ссылки на массив, что использовалась для сохранения элемента.
mrserfr Уровень 33
12 марта 2016
equals hashcode переопределил? это первое, что на ум приходит. если нет — там сравнение по ссылке. без кода не понять…
AndreGold Уровень 28
12 марта 2016
увидеть бы код