Хранение нескольких значений с одинаковым ключом в HashMap
Сегодня у меня было интервью, и мой интервьюер спросил меня, как я могу хранить несколько значений, имеющих один и тот же ключ в HashMap?
Она привела мне такой пример-->если мне дают список строк и я должен хранить длину строки как ключ, а саму строку как значение.
Я дал ей следующее решение в том, как я буду использовать HashMap:
Map<Integer, ArrayList<String>> map = new HashMap<Integer, ArrayList<String>>();
Целое число, являющееся длиной строки, и ArrayList будет хранить строки этой конкретной длины.
Интервьюер сказал, что это один из способов использования хэш-карты, но есть и другой способ, в котором мне не потребуется ArrayList или любая другая структура данных. Во время интервью я не мог придумать никакого решения, и теперь, после того, как достаточно погуглил, у меня все еще ничего нет. Может ли кто-нибудь сказать мне, как я могу достичь решения этого вопроса?
Спасибо!
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