Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从非';t型物体?_Java_Key_Hashmap - Fatal编程技术网

Java 如何从非';t型物体?

Java 如何从非';t型物体?,java,key,hashmap,Java,Key,Hashmap,这不起作用,因为它.next()返回对象。我的hashmap使用int作为键。我的所有方法都接受int来访问hashmap。在循环使用键时,如何实际获取int值,以便将其传递给其他方法?首先,在定义映射时尝试使用泛型。那你就不用担心了 第二件事,HashMap不使用基元类型作为键。这意味着您弄错了,用作键的实际类型是Integer,而不是int 快速修复可以转换为int,如下所示 Iterator it = myHashMap.keySet().iterator(); while (it.has

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

首先,在定义
映射时尝试使用泛型。那你就不用担心了

第二件事,HashMap不使用基元类型作为键。这意味着您弄错了,用作键的实际类型是
Integer
,而不是
int

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

Iterator it = myHashMap.keySet().iterator();
while (it.hasNext()) {
   int next = it.next();
}
一个详细的示例,带有一个新的循环语法(在Java5中引入)

Map Map=newhashmap();
...
for(int n:map.keySet()){
...
}

您应该使用Java泛型:

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

Java中的HashMaps只能使用对象,不能使用原语

因此,键更可能是Integer类型的,并且当您将内容放入时,它会从int提升到Integer

尽管如此,这确实是一个古老的爪哇。您的集合应该使用泛型定义键和目标类型,Java中也有for-each for(整数键:myHashMap.keySet())


顺便说一句:请注意,对于迭代的顺序没有任何保证。

当您将
int
s用作
Map
s中的键时,它们是
Integer
s

任何Java程序员都知道,不能将int(或其他原语值)放入集合中。集合只能保存对象引用,因此必须将基元值装箱到适当的包装器类中(在int的情况下是整数)。当您将对象从集合中取出时,您将得到输入的整数;如果需要int,则必须使用intValue方法取消对整数的装箱。所有这些装箱和拆箱都是一件痛苦的事情,会把代码弄得乱七八糟。自动装箱和拆箱功能使过程自动化,消除了痛苦和混乱


你应该使用泛型

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

如果你想按升序排列你的密钥,考虑使用<代码> TeMeMAP < /C> >而不是<代码> HashMap < /C> >

< p>我不确定你的密钥数组是否是你所需要的,但是我通常通过这样的映射循环:

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

}
Map Map=newhashmap();
对于(Map.Entry:Map.entrySet()){
System.out.println(“Key:+entry.getKey());
System.out.println(“Value:+entry.getValue());
}

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

迭代器it=myHashMap.keySet().Iterator();虽然 (it.hasNext()){int next=it.next();}


实际上,转换为int不起作用。它说不能从object强制转换为int。我也不能使用Integer.intValue()。我不知道它给了我什么样的东西\注意:上面的快速修复只适用于Java5或更高版本。对于lesser,您需要
((Integer)it.next()).intValue()
@Joren,刚刚完成实现,并收到您的评论。谢谢,修好了,谢谢。这(以及下面所有类似的回复)正是我所需要的。
 Map<Integer, Object> myHashMap;
for (int key : myHashMap.keySet()){

}
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());
}