如何从散列映射中获取非Object类型的键数组?

时间:2010-01-15 02:33:08

标签: java key hashmap

Iterator it = myHashMap.keySet().iterator();
while (it.hasNext()) {
   int next = it.next();
}

这不起作用,因为it.next()返回Object。我的hashmap使用int作为键。我的所有方法都接受int来访问hashmap。在循环我的键时,如何实际获取int值,以便将其传递给其他方法?

7 个答案:

答案 0 :(得分:3)

首先尝试在定义Map / HashMap时使用泛型。那你就不用担心了。

其次,HashMap不使用基本类型的键。这意味着你错了,用作密钥的实际类型是Integer,而不是int

快速修复可以转换为int,如下所示

int next = ((Integer) it.next()).intValue();

一个详细的例子,带有一个新的循环语法(在Java 5中引入)。

Map<Integer, String> map = new HashMap<Integer, String>();
...
for(int n : map.keySet()) {
  ...
}

答案 1 :(得分:3)

你应该使用泛型。

 Map<Integer, Object> myHashMap;

这为你提供了Integer的键(不是int,但是没有帮助)。整数可以自动取消装箱:

for (int key : myHashMap.keySet()){

}

如果您希望按升序排列密钥,请考虑使用TreeMap代替HashMap

答案 2 :(得分:2)

您应该使用Java泛型:

Map<Integer, Object> myHashMap = new HashMap<Integer, Object>();
// ...
for (int key : myHashMap.keySet()) {
    // ...
}

答案 3 :(得分:1)

Java中的HashMaps只能使用对象,而不能使用对象。

因此,你的密钥更有可能是Integer类型,当你把东西放入时,它会从int升级到Integer。

所有这一切,这真是老派Java。您的集合应该使用泛型定义键和目标类型,并且Java中也有for-each for(整数键:myHashMap.keySet())

顺便说一句:请注意,您无法保证迭代的顺序。

答案 4 :(得分:1)

intInteger s中将Map用作{{1}}时,{{1}}为{{1}}。

  

正如任何Java程序员所知,你不能将int(或其他原始值)放入集合中。集合只能保存对象引用,因此必须将原始值装入适当的包装类(在int的情况下为Integer)。当您从集合中取出对象时,您将获得放入的Integer;如果需要int,则必须使用intValue方法取消对Integer的装箱。所有这些装箱和拆箱都是一种痛苦,并使你的代码变得混乱。自动装箱和拆箱功能可自动完成整个过程,消除痛苦和杂乱。

答案 5 :(得分:0)

我不确定你的关键数组是否只是你需要的,但我通常会循环遍历这样的地图:

Map<Integer, Object> map = new HashMap<Integer, Object>();

for(Map.Entry<Integer, Object> entry : map.entrySet()) {
    System.out.println("Key: " + entry.getKey());
    System.out.println("Value: " + entry.getValue());
}

答案 6 :(得分:0)

答案很简单:使用通用迭代器,如下所示。

  

迭代&LT;整数&GT; it = myHashMap.keySet()。iterator();而   (it.hasNext()){int next = it.next(); }