Respuestas:
No puede usar tipos primitivos como argumentos genéricos en Java. Use en su lugar:
Map<String, Integer> myMap = new HashMap<String, Integer>();
Con auto-boxing / unboxing hay poca diferencia en el código. El auto-boxeo significa que puedes escribir:
myMap.put("foo", 3);
en vez de:
myMap.put("foo", new Integer(3));
El auto-boxeo significa que la primera versión se convierte implícitamente en la segunda. El desempaquetado automático significa que puede escribir:
int i = myMap.get("foo");
en vez de:
int i = myMap.get("foo").intValue();
La llamada implícita a intValue()
significa que si no se encuentra la clave, generará un NullPointerException
, por ejemplo:
int i = myMap.get("bar"); // NullPointerException
La razón es el tipo de borrado . A diferencia, por ejemplo, en C #, los tipos genéricos no se retienen en tiempo de ejecución. Son simplemente "azúcar sintáctico" para un casting explícito que te ahorrará hacer esto:
Integer i = (Integer)myMap.get("foo");
Para darle un ejemplo, este código es perfectamente legal:
Map<String, Integer> myMap = new HashMap<String, Integer>();
Map<Integer, String> map2 = (Map<Integer, String>)myMap;
map2.put(3, "foo");
GNU Trove admite esto pero no utiliza genéricos. http://trove4j.sourceforge.net/javadocs/gnu/trove/TObjectIntHashMap.html
No puede usar tipos primitivos en HashMap
. int
o double
no funciona. Tienes que usar su tipo envolvente. para un ejemplo
Map<String,Integer> m = new HashMap<String,Integer>();
Ahora ambos son objetos, así que esto funcionará.
int es un tipo primitivo, puede leer lo que significa un tipo primitivo en java aquí , y un mapa es una interfaz que tiene objetos como entrada:
public interface Map<K extends Object, V extends Object>
objeto significa una clase, y también significa que puede crear otra clase que se ejecute a partir de ella, pero no puede crear una clase que se ejecute desde int. Por lo tanto, no puede usar la variable int como un objeto. Tengo soluciones de remolque para su problema:
Map<String, Integer> map = new HashMap<>();
o
Map<String, int[]> map = new HashMap<>();
int x = 1;
//put x in map
int[] x_ = new int[]{x};
map.put("x", x_);
//get the value of x
int y = map.get("x")[0];
Puede usar el tipo de referencia en argumentos genéricos, no el tipo primitivo. Así que aquí deberías usar
Map<String, Integer> myMap = new HashMap<String, Integer>();
y almacenar valor como
myMap.put("abc", 5);