Поиск объекта на карте Java - PullRequest
1 голос
/ 30 ноября 2011

Я новичок в Java, я работал с классом Map и его производными.

Мне было просто интересно, как в них находятся элементы. Выполняется только проверка указателя / ссылки?

Допустим, у меня есть TreeMap<MyObject, Integer>. Если у меня есть объект x, я бы хотел, чтобы вы искали целое число v так, чтобы его ключ был "равен" x, даже если это 2 отдельных экземпляра класса MyObject, следовательно, 2 разных указателя.

Существует ли какой-либо метод (также интерфейса / суперкласса), который может выполнять такую ​​операцию?

Спасибо заранее.

Ответы [ 3 ]

2 голосов
/ 30 ноября 2011

Все методы, которые включают сравнения в Map и ее реализациях, используют метод «равно» для объектов. Если вы попытаетесь добавить ключ + значение на карту, которая уже содержит вход с ключом, который сравнивается с равным ему, то новый ключ + значение заменяет старый.

См. документацию :

Например, спецификация для метода containsKey (Object key) гласит: «возвращает true тогда и только тогда, когда эта карта содержит отображение для ключа k, такого что (key == null? K == null: key.equals (к)) «.

Реализация может не выполнить никакого сравнения, если оно может определить, что ключи «неравны» с помощью других средств, таких как сравнение хеш-кодов.

1 голос
/ 30 ноября 2011

В вашем примере вы бы сделали

 TreeMap<MyObject, Integer> tree = ...
 Integer i = tree.get(x);

get(x) будет перебирать ваш keys() и возвращать целочисленное значение для ключа, соответствующего aKey.equals(x).

0 голосов
/ 30 ноября 2011

В большинстве случаев Map s поддерживаются хэш-таблицей и очень похожи на HashMap. TreeMap дает немного больше информации о каждом узле, имея указатели вверх и вниз по дереву, но поиск все еще выполняется с помощью хэшей (я полагаю)

...