我想創建一個映射,其中String
作爲鍵和基元作爲值。我正在看Java文檔,並沒有看到Primitive是一個類的類型,或者他們共享某種包裝類。Java映射和基元
如何限制該值爲原始值?
Map<String, Primitive> map = new HashMap<String, Primitive>();
我想創建一個映射,其中String
作爲鍵和基元作爲值。我正在看Java文檔,並沒有看到Primitive是一個類的類型,或者他們共享某種包裝類。Java映射和基元
如何限制該值爲原始值?
Map<String, Primitive> map = new HashMap<String, Primitive>();
Java Autoboxing允許在Long, Integer, Double
上創建地圖,然後使用原始值對其進行操作。例如:
java.util.HashMap<String, Integer> map = new java.util.HashMap<String, Integer>();
map.put("one", 1); // 1 is an integer, not an instance of Integer
如果你想在一個地圖不同的原始類型來存儲,您可以通過進行Map<String, Number>
它。允許存儲的值BigDecimal
,BigInteger
,Byte
,Double
,Float
,Integer
,Long
,Short
(和AtomicLong
,AtomicInteger
)。
下面是一個例子:
Map<String, Number> map = new HashMap<String, Number>();
map.put("one", 1);
map.put("two", 2.0);
map.put("three", 1L);
for(String k:map.keySet()) {
Number v = map.get(k);
System.err.println(v + " is instance of " + v.getClass().getName() + ": " + v);
}
你可以做到以下幾點:
Map<String, Integer> map = new HashMap<String, Integer>()
然後操作,如:
map.put("One", 1);
會工作。原始1
將自動裝箱到Integer
。同樣:
int i = map.get("One");
也將工作,因爲Integer
會得到自動拆箱到int
。
查看autoboxing and autounboxing的一些文檔。
每個基元都有一個包裝類,如java.lang.Long
爲long
。
所以,你可以在包裝類映射到String
,如果您使用Java 1.5+,乾脆把元到地圖:
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("key", 10);
int value = map.get("key"); // value is 10.
你會用自己的盒裝對應。
Map<String,Integer> map = new HashMap<String,Integer>();
整數是基元int的不可變盒形類型。有類似的Short,Long,Double,Float和Byte boxed類型。
在Map
接口中不能有原語作爲鍵或值。相反,您可以使用Wrapper類,如Integer
,Character
,Boolean
等。
瞭解更多關於wiki。
谷歌爲「Java的古地圖」,你會發現一些特殊類型的避免自動裝箱的需要。這樣的一個例子是:https://labs.carrotsearch.com/hppc.html
但是,一般來說,你應該在自動裝箱中做得很好,就像其他答案中提到的一樣。
如果由於性能原因您需要該值爲原始值,則可以使用TObjectIntHashMap或類似的值。
例如與地圖<字符串,整數>
TObjectIntHashMap<String> map = new TObjectIntHashMap();
map.put("key", 10);
int value = map.get("key");
一個區別是,該值是int類型原語,而不是整數對象的。
這是我的錯,因爲不清楚。我說我想約束的價值是一個原始類型我的意思是我希望允許任何基本類型被用作特定映射中的值。 – Prospero 2010-12-09 15:23:40