我将一个ArrayList添加到HashMap中,然后按如下方式更改原始列表:
import java.util.*;
public class HashSetCheck{
public static void main(String[] args){
HashMap<ArrayList<Integer>, Integer> set = new HashMap<ArrayList<Integer>, Integer>();
ArrayList<Integer> check = new ArrayList<Integer>();
set.put(check, 0);
check.add(1);
ArrayList<Integer> sep = new ArrayList<Integer>();
sep.add(1);
System.out.println(set.containsKey(check));
System.out.println(set.containsKey(sep));
}
}
在这两种情况下,程序都会输出错误。
我查看了这个question,并知道HashMap将引用存储为密钥。此外,文档指出containsKey(key)
将检查内部所有值k
的以下条件:
(key == null?k == null:key.equals(k))
对于第一种情况,equals()
不应该是真的。它是相同的参考,它是相同的值。否则,如何为ArrayList实现equals()?