这个example让它看起来很简单:
HashSet<Integer> hSet = new HashSet<Integer>();
hSet.add(new Integer("1"));
hSet.add(new Integer("2"));
hSet.add(new Integer("3"));
System.out.println(hSet.contains(new Integer("3")));
真
但是当我在Movie对象上使用它时(我想检查):
Set<Movie> hSet = new HashSet<Movie>();
hSet.add(new Movie(222, "Lord of the Rings", "something"));
System.out.println(hSet);
System.out.println(hSet.contains(new Movie(222, "Lord of the Rings", "something")));
假
hSet打印显示:
[id:222name:指环王]
我没有看到添加新的整数或向列表中添加新的电影对象有什么不同。那么为什么我的例子不起作用呢?
//编辑。
如果有人想要一个好的参考,this helped me out。
答案 0 :(得分:1)
您需要覆盖Movie类中的hashcode
和equals
方法。
在hashset中,每当我们添加对象时,在添加对象之前,它将通过覆盖哈希码来检查对象的hashcode
值
如果计算出的哈希码值已在集合中可用,那么它将调用equals方法并检查我们要添加的对象是否与set中已有的对象相等。
如果对象相等,则它不会将添加到集合中,否则它会将对象添加到集合中。