java: HashMap nie działa
HashMap<String, int>
nie wydaje się działać, ale HashMap<String, Integer>
działa.
Jakieś pomysły dlaczego?
5 answers
Nie można używać typów prymitywnych jako ogólnych argumentów w Javie. Użyj zamiast:
Map<String, Integer> myMap = new HashMap<String, Integer>();
Z auto-boxing / unboxing jest niewielka różnica w kodzie. Auto-Boks czyli można pisać:
myMap.put("foo", 3);
Zamiast:
myMap.put("foo", new Integer(3));
Auto-Boks oznacza, że pierwsza wersja jest domyślnie przekonwertowana na drugą. Auto-unboxing oznacza, że możesz napisać:
int i = myMap.get("foo");
Zamiast:
int i = myMap.get("foo").intValue();
Niejawne wywołanie intValue()
oznacza, że jeśli klucz nie zostanie znaleziony, wygeneruje a NullPointerException
, na przykład:
int i = myMap.get("bar"); // NullPointerException
Powodem jest wymazanie typu . W przeciwieństwie do, powiedzmy, w C#, typy generyczne nie są zachowywane w czasie wykonywania. Są one po prostu "cukrem składniowym" do wyraźnego odlewania, aby zaoszczędzić Ci robiąc to: {]}
Integer i = (Integer)myMap.get("foo");
Aby dać ci przykład, ten kod jest całkowicie legalny:
Map<String, Integer> myMap = new HashMap<String, Integer>();
Map<Integer, String> map2 = (Map<Integer, String>)myMap;
map2.put(3, "foo");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-23 00:06:47
GNU Trove wspiera to, ale nie używa generyków. http://trove4j.sourceforge.net/javadocs/gnu/trove/TObjectIntHashMap.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-23 07:03:34
Nie można używać prymitywnych typów w HashMap
. int
, lub double
nie działają. Musisz użyć jego typu. dla przykładu
Map<String,Integer> m = new HashMap<String,Integer>();
Teraz oba są obiektami, więc to zadziała.
Int jest typem prymitywnym, możesz przeczytać co oznacza typ prymitywny w Javie tutaj , A Mapa jest interfejsem, który ma obiekty jako wejście:
public interface Map<K extends Object, V extends Object>
Obiekt oznacza klasę, A to oznacza również, że można utworzyć inną klasę, która z niej wychodzi, ale nie można utworzyć klasy, która wychodzi z int. Nie można więc używać zmiennej int jako obiektu. Mam rozwiązania holownicze dla Twojego problemu:
Map<String, Integer> map = new HashMap<>();
Lub
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];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-25 23:18:09
Możesz używać typu reference w argumentach ogólnych, a nie prymitywnych. Więc tutaj powinieneś użyć
Map<String, Integer> myMap = new HashMap<String, Integer>();
I przechowuj wartość jako
myMap.put("abc", 5);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-20 04:45:04