Существует ли коллекция или список Java, которые могут возвращать ключ объекта с учетом значения объекта? - PullRequest
2 голосов
/ 20 декабря 2011

Есть ли способ получить коллекцию или список, в котором я могу предоставить ключ и получить связанный объект, и в то же время иметь возможность предоставить объект и получить ключ этого объекта?

Iможно сделать два HashMaps, которые будут ссылаться друг на друга, например:

HashMap <Integer, String> objectAccessor;
objectAccessor.put(5, "five");

HashMap <String, Integer> keyAccessor;
keyAccessor.put("five", 5);

Или я мог бы выполнять итерацию по keySet, пока объект не будет сопоставлен (но это кажется действительно неэффективным).Есть ли эффективный способ сделать это только с одной коллекцией, или два HashMaps мой лучший вариант?

Ответы [ 4 ]

4 голосов
/ 20 декабря 2011

Если вы готовы использовать стороннюю библиотеку, рассмотрите возможность реализации BiMap в Guava.

Например, HashBiMapподдерживается двумя HashMap экземплярами и обрабатывает грязную работу за вас.

0 голосов
/ 20 декабря 2011

Коллекции Google имеют двунаправленную карту . В библиотеке также есть много других приятных функций.

0 голосов
/ 20 декабря 2011

Вы можете использовать BiMap из библиотеки gauva .

0 голосов
/ 20 декабря 2011

Две карты - ваш лучший вариант, я думаю. Конечно, для HashMap, где даже если бы он предусматривал поиск ключа по значению, это было бы неэффективно.

...