HashSet<List<Integer>> ans = new HashSet<>();
List<Integer> list = new ArrayList<>();
list.add(1111);
list.add(22222);
List<Integer> list1 = new ArrayList<>(list);
System.out.println(list1.hashCode());
ans.add(list1);
List<Integer> list2 = new ArrayList<>(list);
System.out.println(list2.hashCode());
ans.add(list2);
for (List<Integer> an : ans) {
System.out.println(an);
}
想问下大神们 为啥list1 和 list2 拥有相同的hashcode 即内存地址
因为发现set中只有一个list
同时我发现
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
list1 和 list2 也有相同的内存地址 他们难道不都是new出来的吗? 为什么会一样呢?
###hashCode
是hashCode
不是内存地址- 一般来说,
内容相同
(即equals == true
)的对象,hashCode
相等
HashSet:
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
HashMap:
public V put(K key, V value) {
return putVal(hash(key), key, value, false, true);
}
实际上是两个对象,但是第二个加不进去。