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

Как я могу получить третье значение для первого ключа на этой карте? Это возможно?

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

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

Например:

 Map> multiMap = new HashMap>(); 

где Pair является параметрическим classом

 public class Pair { 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; } } 

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

 HashMap> 

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

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

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

 Map> hm = new HashMap>(); List values = new ArrayList(); values.add("Value 1"); values.add("Value 2"); hm.put("Key1", values); // to get the arraylist System.out.println(hm.get("key1")); 

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

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

 Map> 

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

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

 public class MutliMapTest { public static void main(String... args) { Multimap 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 fruits = myMultimap.get("Fruits"); System.out.println(fruits); // [Bannana, Apple, Pear] Collection 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!) } } 

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

 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 . MapKey mapKey1 = new MapKey(); mapKey1.setKey1("A"); mapKey1.setKey2("B"); 

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

 Map> map = new HashMap>(); // create list one and store values List One = new ArrayList(); One.add("Apple"); One.add("Aeroplane"); // create list two and store values List Two = new ArrayList(); Two.add("Bat"); Two.add("Banana"); // put values into map map.put("A", One); map.put("B", Two); map.put("C", Three); 

Вы можете сделать что-то вроде этого (добавьте модификаторы доступа по мере необходимости):

 Map> complexMap=new HashMap>(); 

Вы можете вставить такие данные:

  Map componentMap = new HashMap(); componentMap.put("foo","bar"); componentMap.put("secondFoo","secondBar"); complexMap.put("superFoo",componentMap); 

Созданная структура данных будет:

 {superFoo={secondFoo=secondBar, foo=bar}} 

Таким образом, каждое значение для ключа должно иметь уникальный идентификатор . Также дает O (1) для выборки, если ключи известны.

Напишите новый class, который содержит все значения, которые вам нужны, и используйте объект нового classа в качестве значения в вашем HashMap

 HashMap class MyObject { public String value1; public int value2; public List value3; } 
  • HTTPS GET (SSL) с Android и самозаверяющим сертификатом сервера
  • Почему мы иногда вызываем супер в Android?
  • В чем смысл «этого» в Java?
  • Как получить день месяца?
  • onInterceptTouchEvent получает только ACTION_DOWN
  • Получить контекст приложения из classа non activity singleton
  • Как получить список установленных принтеров?
  • Android: изменение фонового цвета активности (основной вид)
  • Разница между getClass (). GetClassLoader (). GetResource () и getClass.getResource ()?
  • Импорт внешнего файла .jar в проект Android
  • Что такое JAVA_HOME? Как JVM находит путь javac, хранящийся в JAVA_HOME?
  • Давайте будем гением компьютера.