Коллекция, какой метод используется для авторизации добавления элемента? - PullRequest
0 голосов
/ 22 мая 2010

Мы находим много конкретных подклассов в Collection.

При попытке добавить элемент в конкретную коллекцию эта коллекция будет использовать метод, чтобы определить, может ли он принять сохранение элемента (и, в конечном итоге, этот элемент еще не находится в коллекции). Он может использовать equals(), hashCode() или compareTo() элемента.

Можно ли найти сводку о том, какой метод используется каждой реализацией Collection?

Большое спасибо за ваши ответы.

Ответы [ 2 ]

1 голос
/ 22 мая 2010

Прежде всего не все коллекции проверяют, существует ли добавляемый вами элемент в коллекции. Например, ArrayList просто добавляет элемент в конец списка, не проверяя, находится ли он уже в списке. Другие классы используют equals, если в коллекции гарантированно есть только одна копия объекта, или CompareTo, если элементы должны быть Comparable и коллекция отсортирована (чтобы найти подходящее место для ее вставки). Карты также будут использовать equals для проверки ключа, но некоторые, такие как HashMap, также будут использовать hashCode () для ускорения процесса поиска (сначала они получают все ключи с одинаковым хеш-кодом, а затем используют equals для каждого из них, чтобы найти ключ уже существует и ему присвоено значение, которое затем будет заменено).

Но если вы хотите посмотреть, как они работают, вы можете проверить источники, которые включены в JDK. В Eclipse у меня есть JRE для папки, в которой установлен jdk, и я могу использовать CTRL + SHIFT + T, чтобы открыть любой класс (тип) в jdk, CTRL + щелкнуть имя класса, или для методов, даже CTRL + щелчок -> открыть реализацию, которая открывает всплывающее окно с классами, реализующими этот метод (если он из интерфейса или метод непосредственно в классе, если это не так)

1 голос
/ 22 мая 2010

Любая конкретная реализация должна указывать в своем документе API, какие предположения она делает относительно поведения своих элементов.

Как правило, коллекции на основе хеша используют hashCode(), а коллекции на основе дерева - compareTo() или Comparator, и все они используют equals().

...