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
和两次一次。
答案 0 :(得分:0)
put
的{{1}}函数在Hashmap中插入值,如果密钥已经存在,它会用新的值替换密钥的旧值,并返回与之关联的先前值密钥,如果没有密钥映射,则为Hashmap
。当您插入前三个值,即10,3,34,因为它们不在null
中,因此返回Hashmap
,但是当您再次插入3时,此键已经存在,因此{{ 1}}替换旧值并返回相同键的旧值,即1,因此它打印1.类似于10。
答案 1 :(得分:0)
我没有得到为什么我得到输出为&#34;三次null和 两次一次&#34;。
理解你需要在put方法上阅读java规范的行为背后的原因。
返回与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 键是唯一的,如果要添加任何重复键,则会覆盖它。