Как следует из заголовка, мой вопрос имеет отношение к переопределению методов hashCode () и equals (). Тем не менее, это также не совсем верно, я просто не знал другого способа подвести итог моего вопроса.
У меня есть объект Label
, который содержит несколько компонентов, один из которых - List
, который содержит несколько объекты типа Node
. Примером Label
будет: [(n1, n2, n3), (n4, n5)]
. Я хочу хранить все уникальные Label
объекты, сгенерированные в LinkedHashSet
. Тем не менее, это не работает, как ожидалось. Предположим, что LinkedHashSet
в настоящее время содержит Label
, описанный выше, и что теперь мы сгенерировали новый Label
с именем other
, который, как оказалось, содержит те же узлы, что и уже добавленная метка, таким образом, также [(n1, n2, n3), (n4, n5)]
. Поскольку у него такой же список узлов, остальные компоненты в Label
также идентичны. Я не буду объяснять здесь, почему, просто предположите, что это так, потому что это так. Однако при проверке, содержит ли LinkedHashSet
уже Label
, возвращается false
, поскольку объекты имеют разные идентификаторы объектов.
Один из подходов - написать for-l oop вместо LinkedHashSet
и сравнить новую метку со всеми метками в LinkedHashSet
, но это будет очень дорого с точки зрения времени выполнения, поэтому я ищу более дешевый вариант. Любые предложения приветствуются!
Другой подход заключается в адаптации метода equals()
, но это не сработало, поскольку мне также пришлось адаптировать метод hashCode()
, и я не знаю, что это изменить чтобы заставить это работать.