Хранение нескольких значений с одинаковым ключом в HashMap



Сегодня у меня было интервью, и мой интервьюер спросил меня, как я могу хранить несколько значений, имеющих один и тот же ключ в HashMap?
Она привела мне такой пример-->если мне дают список строк и я должен хранить длину строки как ключ, а саму строку как значение.



Я дал ей следующее решение в том, как я буду использовать HashMap:



Map<Integer, ArrayList<String>> map = new HashMap<Integer, ArrayList<String>>();


Целое число, являющееся длиной строки, и ArrayList будет хранить строки этой конкретной длины.



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



Спасибо!

878   3  

3 ответов:

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

Например

map.put(2,"rr*tt*yy");
map.put(3,"nnn*ggg*sss");
map.put(4,"ffff*dddd*jjjj");

Возможно, интервьюер искал, чтобы проверить, знаете ли вы сторонние API или нет. Для этого существует несколько доступных API. Некоторые из них можно найти по адресу: http://java.dzone.com/articles/hashmap-%E2%80%93-single-key-and

Один из вариантов-каждый раз, когда вы хотите вставить запись в карту, получить длину строки, а затем зашифровать размер строки для использования в качестве ключа. BAM: у вас есть (довольно) уникальный извлекаемый ключ для каждой строки без необходимости много вокруг с конкатенацией строк.

Просто убедитесь, что вы используете реверсивный алгоритм шифрования. Другой вариант-сгенерировать UUID и связать с ним размер строки.
UUID uuid = UUID.randomUUID()
String key = stringSize + "," + uuid;

Это также будет в результате получается уникальное значение, которое можно получить позже с помощью String.split ();

Comments

    Ничего не найдено.