Java映射和基元

时间:2010-12-09 15:04:49

标签: java dictionary primitive wrapping

我想创建一个以String为键,原语为值的映射。我正在查看Java文档,并没有看到Primitive是一个类类型,或者他们共享某种包装类。

如何将值约束为原语?

Map<String, Primitive> map = new HashMap<String, Primitive>();

7 个答案:

答案 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>来实现。允许存储BigDecimalBigIntegerByteDoubleFloatIntegerLong,{{1}的值(和ShortAtomicLong)。

以下是一个例子:

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界面中不能有原语作为键或值。相反,您可以使用包装类,例如IntegerCharacterBoolean等。

详细了解wiki