Массив списков в Java - PullRequest
       1

Массив списков в Java

1 голос
/ 07 ноября 2011

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

Затем, учитывая индекс этого массива, я должен иметь возможность искать список по индексу при условии наличия единственного ключевого значения и извлекать соответствующее значение.

Постановка проблемы

У меня около 2 миллионов названий веб-страниц, и каждому названию соответствуют категории (одна или несколько).

Я могу их хешировать, чтобы сказать 1 000 000, используя некоторую хеш-функцию, но, очевидно, они будут коллизиями.

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

Ответы [ 2 ]

9 голосов
/ 07 ноября 2011

Звучит так, как будто вы хотите получить массив карт:

List<Map<KeyType, ValueType>> myList = new ArrayList<Map<KeyType, ValueType>>();

Вот как вы добавляете карту:

myList.add(new HashMap<KeyType, ValueType>());

Вот как вы добавляете value к карте с индексом i с ключом key:

myList.get(i).put(key, value);

Для поиска key на карте по индексу i используйте:

ValueType value = myList.get(i).get(key);

Редактировать: После вашего редактирования я думаю, что решение вашей проблемы - просто использовать HashMap<String, List<String>>. Вы бы использовали имя webpage в качестве ключа и список имен категорий в качестве значений. Нет необходимости реализовывать собственную хэш-карту (похоже, именно этим вы и занимались).

1 голос
/ 07 ноября 2011

Поскольку вы добавили информацию в свое описание, я бы порекомендовал вам использовать карту карт. Все, как сказал @ Бьорн Поллекс, но используйте карту вместо списка для хранения самих веб-страниц.

И еще одна рекомендация. Возможно, вы захотите использовать LinkedHashMap вместо обычного HashMap, чтобы иметь возможность извлекать данные в том же порядке, в котором вы их добавили.

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