HashMap: один ключ, несколько значений

Мне было интересно, как я могу получить третье значение для первого ключа на этой карте. Это возможно? Извините, если это повторено, но я ничего не нашел.

Ответ 1

Библиотеки существуют для этого, но самый простой простой способ Java - создать Map of List следующим образом:

Map<Object,ArrayList<Object>> multiMap = new HashMap<Object,ArrayList<Object>>();

Ответ 2

Похоже, вы ищете multimap. Guava имеет различные Multimap реализации, обычно созданные с помощью Multimaps.

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

Ответ 3

Например:

Map<Object,Pair<Integer,String>> multiMap = new HashMap<Object,Pair<Integer,String>>();

где Pair - это параметрический класс

public class Pair<A, B> {
    A first = null;
    B second = null;

    Pair(A first, B second) {
        this.first = first;
        this.second = second;
    }

    public A getFirst() {
        return first;
    }

    public void setFirst(A first) {
        this.first = first;
    }

    public B getSecond() {
        return second;
    }

    public void setSecond(B second) {
        this.second = second;
    }

}

Ответ 4

У вас есть что-то вроде этого?

HashMap<String, ArrayList<String>>

Если это так, вы можете выполнить итерацию через свой ArrayList и получить элемент, который вам нравится, с помощью arrayList.get(i).

Ответ 5

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

Ответ 6

Это то, что я нашел в подобном вопросе answer

Map<String, List<String>> hm = new HashMap<String, List<String>>();
List<String> values = new ArrayList<String>();
values.add("Value 1");
values.add("Value 2");
hm.put("Key1", values);

// to get the arraylist
System.out.println(hm.get("key1"));

РЕЗУЛЬТАТ: [Значение 1, значение 2]

Ответ 7

Попробуйте использовать коллекции для хранения значений ключа:

Map<Key, Collection<Value>>

вам нужно самому сохранить список значений

Ответ 8

Я нашел блог в случайном поиске, я думаю, что это поможет в этом: http://tomjefferys.blogspot.com.tr/2011/09/multimaps-google-guava.html

public class MutliMapTest {
public static void main(String... args) {
   Multimap<String, String> myMultimap = ArrayListMultimap.create();

   // Adding some key/value
   myMultimap.put("Fruits", "Bannana");
   myMultimap.put("Fruits", "Apple");
   myMultimap.put("Fruits", "Pear");
   myMultimap.put("Vegetables", "Carrot");

   // Getting the size
   int size = myMultimap.size();
   System.out.println(size);  // 4

   // Getting values
   Collection<String> fruits = myMultimap.get("Fruits");
   System.out.println(fruits); // [Bannana, Apple, Pear]

   Collection<string> vegetables = myMultimap.get("Vegetables");
   System.out.println(vegetables); // [Carrot]

   // Iterating over entire Mutlimap
   for(String value : myMultimap.values()) {
      System.out.println(value);
   }

   // Removing a single value
   myMultimap.remove("Fruits","Pear");
   System.out.println(myMultimap.get("Fruits")); // [Bannana, Pear]

   // Remove all values for a key
   myMultimap.removeAll("Fruits");
   System.out.println(myMultimap.get("Fruits")); // [] (Empty Collection!)
}
}

Ответ 9

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

public class MapKey {
    private Object key1;
    private Object key2;

    public Object getKey1() {
        return key1;
    }

    public void setKey1(Object key1) {
        this.key1 = key1;
    }

    public Object getKey2() {
        return key2;
    }

    public void setKey2(Object key2) {
        this.key2 = key2;
    }
}


// Create first map entry with key <A,B>.
        MapKey mapKey1 = new MapKey();
        mapKey1.setKey1("A");
        mapKey1.setKey2("B");

Ответ 10

HashMap - одиночный ключ и несколько значений с использованием списка

Map<String, List<String>> map = new HashMap<String, List<String>>();

  // create list one and store values

    List<String> One = new ArrayList<String>();
    One.add("Apple");
    One.add("Aeroplane");

    // create list two and store values
    List<String> Two = new ArrayList<String>();
    Two.add("Bat");
    Two.add("Banana");

    // put values into map
    map.put("A", One);
    map.put("B", Two);
    map.put("C", Three);