2013-12-09 3 views
3

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

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

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

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

Большое спасибо.

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

+0

Поиск "Multimap". Такие также можно эмулировать с помощью «HashMap >» - если это действительно то, что требует подход. – user2864740

+0

Попробуйте следующее: http://java.dzone.com/articles/multimaps-google-guava –

+0

Возможный дубликат [Реализация карты с дублирующимися ключами] (http://stackoverflow.com/questions/1062960/map-implementation-with -duplicate-keys) –

ответ

5

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

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

Обратите внимание, что мы должны использовать Integer потому HashMaps only work with objects. Чтобы добавить значения к этому, вы можете сделать:

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

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

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

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

+0

Я бы предложил сделать это более общим: Map > myMap = new HashMap >(); – bcorso

+0

Согласен! Редактирование списков. Благодаря! – Sammaron

+0

Технически вы должны также использовать карту вместо HashMap. – bcorso

 Смежные вопросы

  • Нет связанных вопросов^_^