2017-04-17 41 views
0
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)); 
     } 
    } 
} 

我得到的输出如下:为什么我得到这个Hashmap输出?

null 
null 
null 
1 
1 

我没有得到为什么我得到的输出作为三次null和两次之一。

+0

为什么最初它的输出为空 – Swati

+3

因为'put()'函数[定义为返回与键关联的旧值](https://docs.oracle.com/javase/8/docs/ API/JAVA/UTIL/HashMap.html#把-KV-)。 –

+0

@安迪托马斯,如果你解释一些更多的话,这将是非常棒的。 – Swati

回答

0

我不明白为什么我得到的输出为“三次空和 两次一”。

了解理解行为背后的原因,您需要阅读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) asso使用该地图中的指定键 指定值。如果映射先前包含密钥的映射 ,则旧值将被替换。

简单地说,HashMap关键是独一无二的,如果有重复的关键是要添加那么它将被覆盖。

0

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

+0

在这里你可以找到文档:https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html#put(K,%20V) –