HashMap: una clave, valores múltiples

¿Cómo puedo obtener el tercer valor para la primera clave en este mapa? es posible?

Existen bibliotecas para hacer esto, pero la forma Java simple más simple es crear un Map de List como este:

 Map> multiMap = new HashMap<>(); 

Parece que estás buscando un multimapa . Guava tiene varias implementaciones de Multimap , generalmente creadas a través de la clase Multimaps .

Sugeriría que usar esa implementación probablemente sea más simple que hacerla funcionar, averiguar cómo debería ser la API, verificar cuidadosamente una lista existente al agregar un valor, etc. Si su situación tiene una aversión particular hacia las bibliotecas de terceros, puede valer la pena, pero por lo demás, Guava es una biblioteca fabulosa que probablemente te ayude con otro código también 🙂

¿Tienes algo como esto?

 HashMap> 

De ser así, puede recorrer su ArrayList y obtener el elemento que desee con arrayList.get (i).

Un Java HashMap estándar no puede almacenar múltiples valores por clave, cualquier nueva entrada que agregue sobrescribirá la anterior.

Esto es lo que encontré en la respuesta de una pregunta similar

 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")); 

RESULTADO: [Valor 1, valor 2]

Intente usar colecciones para almacenar los valores de una clave:

 Map> 

tienes que mantener la lista de valores tú mismo

Encontré el blog en búsqueda aleatoria, creo que esto ayudará a hacer esto: 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!) } } 

Pensar en un Mapa con 2 claves me obligó inmediatamente a usar una clave definida por el usuario, y eso probablemente sería una Clase. La siguiente es la clase clave:

 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: clave única y valores múltiples usando la lista

 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); 

Puede hacer algo como esto (agregue modificadores de acceso según sea necesario):

 Map> complexMap=new HashMap>(); 

Puede insertar datos como este:

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

La estructura de datos generada sería:

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

De esta forma, cada valor de la clave debe tener un identificador único . Otorga O (1) para recuperaciones, si se conocen las claves.

Escriba una nueva clase que contenga todos los valores que necesita y use el objeto de la nueva clase como el valor en su HashMap

 HashMap class MyObject { public String value1; public int value2; public List value3; }