我想创建一个以String
为键,原语为值的映射。我正在查看Java文档,并没有看到Primitive是一个类类型,或者他们共享某种包装类。
如何将值约束为原语?
Map<String, Primitive> map = new HashMap<String, Primitive>();
答案 0 :(得分:8)
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
,{{1}的值(和Short
,AtomicLong
)。
以下是一个例子:
AtomicInteger
答案 1 :(得分:4)
谷歌的“Java原始地图”,你会发现一些专门的类型,避免了自动装箱的需要。例如:https://labs.carrotsearch.com/hppc.html
但是,一般情况下,如其他答案中所述,您应该使用自动装箱。
答案 2 :(得分:3)
您可以执行以下操作:
Map<String, Integer> map = new HashMap<String, Integer>()
然后执行如下操作:
map.put("One", 1);
会奏效。原始1
将自动装入Integer
。同样地:
int i = map.get("One");
也会有效,因为Integer
会自动取消装箱到int
。
查看autoboxing and autounboxing上的一些文档。
答案 3 :(得分:2)
每个原语都有一个包装类,如long
的{{3}}。
因此,您可以将包装器类映射到String
,如果使用Java 1.5+,只需将基元放到地图上:
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("key", 10);
int value = map.get("key"); // value is 10.
答案 4 :(得分:1)
你会使用他们的盒装对手。
Map<String,Integer> map = new HashMap<String,Integer>();
Integer是原始int的不可变盒装类型。有类似的Short,Long,Double,Float和Byte盒装类型。
答案 5 :(得分:1)
如果由于性能原因需要将值设置为原语,则可以使用TObjectIntHashMap或类似名称。
e.g。
TObjectIntHashMap<String> map = new TObjectIntHashMap();
map.put("key", 10);
int value = map.get("key");
Map&lt; String,Integer&gt;的一个区别是值是int原语而不是Integer对象。
答案 6 :(得分:0)
Map
界面中不能有原语作为键或值。相反,您可以使用包装类,例如Integer
,Character
,Boolean
等。
详细了解wiki。