Тип интерфейса Java ArrayList - PullRequest
0 голосов
/ 06 марта 2012

У меня есть много классов, которые реализуют общий интерфейс. Я использую определение, такое как mytypes Array List, и добавляю объекты этого типа в ArrayList. Теперь я хочу использовать метод содержит класс ArrayList, чтобы увидеть, содержит ли этот список класс, который я добавляю.

Если я реализую hashcode и equals в классах, будет ли метод содержит знать, есть ли определенный объект в ArrayList или нет?

Ответы [ 3 ]

2 голосов
/ 06 марта 2012

из List.contains():

Возвращает true, если этот список содержит указанный элемент. Больше формально, возвращает true, если и только если этот список содержит хотя бы один элемент e такой, что (o == null? e == null: o.equals (e)).

Так что в основном hashCode() здесь не имеет значения, только equals()

РЕДАКТИРОВАТЬ : [лучше явно, чем неявно], как упоминалось в комментариях @aiobee, equals() все еще необходимо переопределить - в соответствии с контрактом - но это не повлияет на возвращаемое значение contains()

1 голос
/ 06 марта 2012

ArrayList.contains не будет использовать hashCode, но будет использовать equals, как задокументировано :

Возвращает true, если этот список содержит указанный элемент.Более формально, возвращает true тогда и только тогда, когда этот список содержит хотя бы один элемент e такой, что (o == null? E == null: o.equals (e)).

(Этоне проверяет, есть ли «этот класс» уже в списке - он проверит, есть ли равный объект в списке.)

1 голос
/ 06 марта 2012

Реализация hashCode бесполезна для этой цели, но это практика goog, чтобы переопределить и equals и hashCode одновременно.

Да, это будет работать, вот цель метода содержит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...