HashMap<String, int>
似乎並沒有工作,但HashMap<String, Integer>
確實工作。 任何想法爲什麼?的java:HashMap的<String, int>不工作
回答
不能使用基本類型作爲Java的泛型參數。改用:
Map<String, Integer> myMap = new HashMap<String, Integer>();
與auto-boxing/unboxing代碼沒有什麼區別。自動裝箱意味着你可以這樣寫:
myMap.put("foo", 3);
代替:
myMap.put("foo", new Integer(3));
自動裝箱是指第一個版本被隱式轉換爲第二。自動拆箱意味着你可以寫:的
int i = myMap.get("foo");
代替:
int i = myMap.get("foo").intValue();
到intValue()
的隱式調用意味着,如果關鍵是沒有找到它會產生一個NullPointerException
,例如:
int i = myMap.get("bar"); // NullPointerException
的原因是type erasure。與C#不同,通用類型不會在運行時保留。他們只是「語法糖」爲顯式轉換來拯救你這樣做:
Integer i = (Integer)myMap.get("foo");
給你舉一個例子,這個代碼是完全合法:
Map<String, Integer> myMap = new HashMap<String, Integer>();
Map<Integer, String> map2 = (Map<Integer, String>)myMap;
map2.put(3, "foo");
您的最後一個例子不工作:無法從地圖<字符串,整數>投地圖<整數,字符串> – T3rm1 2013-06-24 08:16:51
爲什麼它不'Float'和'Double'工作? – 2015-02-25 16:25:30
考慮到新行中的每個單獨的代碼,第5行中的代碼在使用intValue()方法之前必須首先轉換爲Integer,因爲在使用get()方法時將其視爲對象。 – 2016-03-31 09:50:37
GNU特羅韋支持這一點,但不使用泛型。 http://trove4j.sourceforge.net/javadocs/gnu/trove/TObjectIntHashMap.html
可以在通用的參數,而不是原始類型使用引用類型。 所以在這裏,你應該使用
Map<String, Integer> myMap = new HashMap<String, Integer>();
和存儲值
myMap.put("abc", 5);
這不回答問題 – smac89 2016-05-20 02:25:22
@ Smac89我不認爲這正確地回答了這個問題,但它是一個答案。所以要正確處理這個問題就是降低投票率,而不是標記。 – 2016-05-20 02:44:19
在HashMap
不能使用基本類型。 int
或double
不起作用。你必須使用它的封閉類型。舉例
Map<String,Integer> m = new HashMap<String,Integer>();
現在這兩個都是對象,所以這將工作。
- 1. ObservableParcelable <String>不工作
- 2. 「錯誤:不對應的「操作符<<」用的std :: string工作時
- 3. ArrayList的HashMap <String>,String無法正常工作?
- 4. std :: string ==不工作?
- 5. Closure-param類型的對象。 <string, *>不能正常工作
- 6. binary_search不工作的一個載體<string>
- 7. AsyncTask <String,Void,Void>如何工作?
- 8. 操作<<對的std :: string
- 9. .Replace(String,String)VB函數不工作
- 10. Binary operator'+ ='不能應用於類型'[Dictionary <String,String>]'和'Dictionary <String,String>'的操作數'
- 11. Map <String,Map <String,Boolean >> myMap = new HashMap <String,HashMap <String,Boolean >>();
- 12. IEnumerable的<string>和string []
- 13. Java:HashMap工作,LinkedHashMap獲取空指針異常
- 14. Matlab的數組:String不工作
- 15. C#中的Convert.ToInt32(String)不工作?
- 16. Unordered_map <string, int> works但Unordered_map <string,string>不是
- 17. JAVA:Hashmap - 字符串返回arraylist
- 18. For-Each Loop,Map <String,Map <String,List <String> >>
- 19. 與JSONArrays工作:我轉換如何ArrayList的<String[]>
- 20. 的Java:HashMap的:得到:指定默認值
- 21. 鮮明操作<string>
- 22. Javapoet - TypeName - HashMap <String,HashMap <String,List <String> >> generation?
- 23. Android ArrayList <HashMap <String,String >>
- 24. 如何操作LinkedList <HashMap <String,String >>?
- 25. 展望從IQueryable的<String>爲String
- 26. ICollection <string> to string []
- 27. List.Map <String,String>
- 28. <string>和Kohana的'string'區別
- 29. 如何使用相同的遞歸函數迭代Map <String,String>和Map <String,Map <String,String >>?
- 30. 的毗連HashSet的<String>和IList的<String>
你對你的問題的選擇詞是混淆,你能澄清?確切地說,什麼是不工作的,你可以發佈代碼嗎? – 2009-11-22 23:23:00
@aforloney - 顯然這是一個編譯錯誤。 – 2009-11-23 03:36:40