Iterator it = myHashMap.keySet().iterator();
while (it.hasNext()) {
int next = it.next();
}
这不起作用,因为it.next()返回Object。我的hashmap使用int作为键。我的所有方法都接受int来访问hashmap。在循环我的键时,如何实际获取int值,以便将其传递给其他方法?
答案 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)
int
在Integer
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(); }