为什么我要得到这个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