Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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
为什么我要得到这个Hashmap输出? import java.util.HashMap; 公共类地图{ 公共静态void main(字符串[]args){ //TODO自动生成的方法存根 int arr[]={10,3,34,3,10}; HashMap hmap=新的HashMap(); 对于(int i=0;i_Java_Collections_Hashmap - Fatal编程技术网

为什么我要得到这个Hashmap输出? import java.util.HashMap; 公共类地图{ 公共静态void main(字符串[]args){ //TODO自动生成的方法存根 int arr[]={10,3,34,3,10}; HashMap hmap=新的HashMap(); 对于(int i=0;i

为什么我要得到这个Hashmap输出? import java.util.HashMap; 公共类地图{ 公共静态void main(字符串[]args){ //TODO自动生成的方法存根 int arr[]={10,3,34,3,10}; HashMap hmap=新的HashMap(); 对于(int i=0;i,java,collections,hashmap,Java,Collections,Hashmap,我得到的输出如下: null 无效的 无效的 1. 1. 我不明白为什么我得到的输出是三次null和两次一。Hashmap的put函数在Hashmap中插入值,如果键已经存在,它会用新的值替换键的旧值,并返回与键关联的先前值,或者null如果没有键的映射。当您插入前三个值,即10,3,34,因为它们不存在于Hashmap中,因此返回null,但当您再次插入3时,该键已经存在,因此put将替换旧值,并为同一个键返回旧值,即1,从而打印1。10人的情况也差不多 我没有得到为什么我得到的输出是“三次

我得到的输出如下:

null
无效的
无效的
1.
1.

我不明白为什么我得到的输出是三次
null
和两次一。

Hashmap
put
函数在Hashmap中插入值,如果键已经存在,它会用新的值替换键的旧值,并返回与键关联的先前值,或者
null
如果没有键的映射。当您插入前三个值,即10,3,34,因为它们不存在于
Hashmap
中,因此返回
null
,但当您再次插入3时,该键已经存在,因此
put
将替换旧值,并为同一个键返回旧值,即1,从而打印1。10人的情况也差不多

我没有得到为什么我得到的输出是“三次零和零” 二乘一”

要理解行为背后的原因,您需要阅读put方法的java规范

返回与键关联的上一个值,如果没有,则返回null 键的映射

你想要的是:

int arr[] = {10,3,34,3,10};

HashMap<Integer,Integer> hmap = new HashMap<Integer,Integer>();
for (int i = 0; i < arr.length; i++) {
     hmap.put(arr[i],1);
}

hmap.forEach((k, v) -> System.out.println("key = " + k + " value = " + v));
如果您想知道为什么不打印
arr
数组中的所有键,那么这背后的原因很简单,因为:

将指定的值与 此映射中指定的密钥。如果映射以前包含映射 对于键,将替换旧值


简单地说,键是唯一的,如果要添加任何重复的键,那么它将被覆盖

为什么最初它会将输出设为null,因为
put()
函数是空的。@Andy Thomas,如果你再解释一下就好了。你希望它打印什么,为什么?你读过的文档了解它返回了什么吗?@Swati-因为你让它打印出来。System.out.println(对象)打印
String.valueOf(对象)
的值,即。您从前三次put()调用中得到了null值,因为之前没有与这些键关联的值。不要猜测方法的行为。阅读文档。您可以在这里找到文档:
key = 34 value = 1
key = 3 value = 1
key = 10 value = 1