Хранение значений с дубликатами ключей в TreeMap, HashMap или LinkedHashMap

В настоящее время я работаю над проектом, в котором я получаю данные об именах с веб-сайта социального обеспечения. В основном мне дано число x, а годы y и z. Я должен вернуть имена топ-х из каждого года от y до z.

Таким образом, данные, возвращаемые с сайта, - это имя, звание и год. Я должен ввести каждое возвращаемое имя либо в TreeMap, HashMap, либо в LinkedHashMap, но я не уверен, как их хранить, потому что независимо от того, что я использую в качестве ключа, могут быть дубликаты. Год не может быть ключевым, так как у меня будут топовые имена из каждого года, поэтому все они будут из одного года. Если существует несколько лет, будет несколько имен ранга 1 и т. Д., Поскольку есть одно для каждого года, поэтому это не может быть ключом. И само имя не могло быть ключом, так как одно и то же имя могло быть в топ-нескольких имен в течение нескольких лет.

Мне удалось понять большинство сложных частей этого проекта, но это - одна из самых простых частей, я не могу понять!

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

Спасибо.

Изменить: Обратите внимание, что мне было специально сказано, что я ДОЛЖЕН использовать TreeMap, HashMap или LinkedHashMap. Я слышал о MultiMap, но это не один из моих вариантов.

1 ответ

Решение

Я думаю, что использование hashmap со списком - это то, что вы конкретно просите. Пример того, как создать экземпляр такого объекта:

HashMap<Integer, List<String>> myHashMap = new HashMap<Integer, List<String>>();

Обратите внимание, что мы должны использовать Integer потому что хешмапы работают только с объектами. Чтобы добавить значения к этому, вы можете сделать:

myHashMap.get([whatever year you wanted]).add("[whatever name you want]");

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

if (!myHashMap.containsKey(myYear)) {
    myHashMap.put(myYear, new List<String>());
}

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

Другие вопросы по тегам