HashMap: получить массив списков ключей или значений - PullRequest
2 голосов
/ 08 января 2010

У меня есть два arraylists A1, A2. Каждый элемент A1 будет ключом, а каждый элемент A2 - соответствующим значением. Таким образом, решение, которое я нашел, заключается в создании цикла для A1 (A1 и A2 имеют одинаковый размер), создающего hashmap.add (A1 [i], A2 [i]), но есть ли способ прямой отправки пар ключ-значение в виде двух наборов? Я хочу избежать циклов, это замедлит мой код .. Заранее спасибо!

Ответы [ 4 ]

5 голосов
/ 08 января 2010

«Я хочу избежать циклов, это замедлит мой код». В любое время код делает что-нибудь, это замедляет ваш код. Ключ состоит в том, чтобы избегать делать то, что вам не нужно делать. Что-то должно пройтись по вашим спискам.

2 голосов
/ 08 января 2010

Если вам удастся контролировать порядок, в котором вы вставляете элементы в массивы, и вы можете делать это в отсортированном порядке, вам, возможно, не понадобится HashMap в конце концов. Хотя в хешированном поиске будет отображаться амортизированное постоянное время , вы можете получить поиск за O (log n) время с двоичным поиском в течение отсортированная последовательность произвольного доступа, как массив. Функция Arrays#binarySearch() позволяет вам определить, какой элемент, если таковой имеется, соответствует вашему ключу в первом массиве, и, учитывая эту позицию, вы можете получить доступ к соответствующему значению в параллельном массиве.

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

2 голосов
/ 08 января 2010

У вас есть список пар ключ-значение. Единственный способ взять этот список и добавить его в Hashmap - это перебрать список. Если бы ваши пары ключ-значение хранились в каком-либо другом типе Map объекта, вы могли бы использовать Hashmap конструктор HashMap(Map<? extends K,? extends V> m), но не с вашим ArrayList.

Не бойтесь итерации в вашем коде, если это правильный подход. Помните Поля : найдите решение, а затем посмотрите, сможете ли вы найти лучшее решение.

0 голосов
/ 08 января 2010

Возможно, вам удастся избежать итерации для вставки данных в массивы, делая это непосредственно в хэш-карту.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...