为什么我得到这个Hashmap输出?

时间:2017-04-17 15:44:14

标签: java collections hashmap

import java.util.HashMap;

public class Map {

   public static void main(String[] args) {
       // TODO Auto-generated method stub

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

       HashMap<Integer, Integer> hmap=new HashMap<Integer, Integer>();

       for (int i = 0; i < arr.length; i++) {
           System.out.println(hmap.put(arr[i], 1));
       }
   }
}

我得到如下输出:

null
null
null
1
1

我不知道为什么我将输出三次null和两次一次。

2 个答案:

答案 0 :(得分:0)

put的{​​{1}}函数在Hashmap中插入值,如果密钥已经存在,它会用新的值替换密钥的旧值,并返回与之关联的先前值密钥,如果没有密钥映射,则为Hashmap。当您插入前三个值,即10,3,34,因为它们不在null中,因此返回Hashmap,但是当您再次插入3时,此键已经存在,因此{{ 1}}替换旧值并返回相同键的旧值,即1,因此它打印1.类似于10。

答案 1 :(得分:0)

  

我没有得到为什么我得到输出为&#34;三次null和   两次一次&#34;。

理解你需要在put方法上阅读java规范的行为背后的原因。

put(K key, V value)

  

返回与key关联的先前值,如果没有则返回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));

输出:

key = 34 value = 1
key = 3 value = 1
key = 10 value = 1

如果你想知道为什么不打印arr数组中的所有键,原因只是因为:

  

put(K key, V value)将指定的值与   此映射中的指定键。如果地图以前包含映射   对于密钥,旧值被替换。

简单来说, HashMap 键是唯一的,如果要添加任何重复键,则会覆盖它。