Нужна помощь в отображении этих данных в Java

У меня проблемы с отображением этих данных

          1           35
          1           30
          1           20
          2           10
          3           40
          3           25
          3           15

Я попытался использовать HashMap, но он будет отображать только последнее вхождение этих данных.


person Steffan Harris    schedule 16.12.2010    source источник


Ответы (5)


Поведение Map и HashMap, которое вы описываете, является предполагаемым поведением, как отмечают другие комментаторы. То, что вы хотите, это мультикарта. Вы можете свернуть свою собственную (не делайте этого - другие комментаторы предлагают карты для списков, но это быстро становится громоздким. Если вы действительно хотите свернуть свою собственную, сверните свою собственную общую мультикарту со значениями списка/набора и скройте сложность. ) или используйте Guava множественная карта. Пример:

import com.google.common.collect.HashMultimap;
import com.google.common.collect.SetMultimap;

  public static void main(String[] args) 
  {
    final SetMultimap<Integer, Integer> foo = HashMultimap.create();
    foo.put( 1,35);
    foo.put(   1,30);
    foo.put(  1,20);
    foo.put(  2,10);
    foo.put(  3,40);
    foo.put(  3,25);
    foo.put(  3,15);
    System.out.println(foo);
  }

Выход:

{1=[35, 20, 30], 2=[10], 3=[25, 40, 15]}

Если вы хотите получить доступ к значениям, есть несколько способов в зависимости от того, что вы хотите сделать. Просто вызов get(Integer key) вернет набор значений.

Кроме того, проверьте этот ответ, в котором приводится много полезного в гуаве.

person andersoj    schedule 16.12.2010

В документации указано:

открытый интерфейс Map
Объект, который сопоставляет ключи со значениями. Карта не может содержать повторяющиеся ключи; каждый ключ может соответствовать не более чем одному значению.

Вместо этого вы можете связать список чисел с каждой клавишей.

person SLaks    schedule 16.12.2010

Вы можете использовать Map<Long, List<Long>> (или любой другой тип, который у вас есть) для решения этой проблемы.

person Art Licis    schedule 16.12.2010

Map имеет только одно значение для ключа. Вы можете использовать Multimap интерфейс из Guava/Google Collections для хранения нескольких значений ключа.

person David Phillips    schedule 16.12.2010

Или создайте класс Pair‹ F, S> и поместите их в список

Список‹ Пара‹ Целое, Целое > >

person Diogo    schedule 16.12.2010