2014-11-28 5 views
1

Я хочу иметь карту в обратном направлении, что означает, что у меня много ключей и только одно значение. Мне нужна эта структура, поэтому, когда я ищу один из ключей, я получил значение.Как реализовать структуру данных, которая представляет собой карту много к одному?

enter image description here

я могу использовать простой хэш-карту, но это тратить место из-за хранение значений много раз. Я ищу оптимизацию и эффективную реализацию в java. Я ценю ваше предложение.

+6

Вы всегда будете иметь *, чтобы сохранить копию хотя бы указателя на значение для каждой клавиши. Поэтому я бы сказал, что хеш-карта - идеальный выбор здесь. –

+0

Вы когда-нибудь слышали о «Ошибке преждевременной оптимизации»? – clapas

+0

что на самом деле 'шляпа'? это класс или строка? как насчет использования наследования и оператора 'instanof'? если вы так осведомлены об использовании пространства, почему вы используете java? вы все равно можете использовать 'HashMap', но введите значение как тип перечисления. – HuStmpHrrr

ответ

7

HashMap следует использовать. когда вы помещаете «ткань» в значение HashMap в качестве значения, оно не дублируется в памяти. просто ссылка записывается в HashMap.

String hat = "hat"; 
String dress = "dress"; 
String paths = "paths"; 
String scarf = "scarf"; 
String cloth = "cloth"; 
HashMap h = new HashMap(); 
h.put(hat,cloth); 
h.put(paths,cloth); 
h.put(dress,cloth); 
h.put(scarf,cloth); 

для этого образца, память хранит только материал ткани за один раз.

2

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