如何检查HashSet中是否已存在对象?

时间:2017-12-04 19:19:11

标签: java set

这个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

1 个答案:

答案 0 :(得分:1)

您需要覆盖Movie类中的hashcodeequals方法。

在hashset中,每当我们添加对象时,在添加对象之前,它将通过覆盖哈希码来检查对象的hashcode值 如果计算出的哈希码值已在集合中可用,那么它将调用equals方法并检查我们要添加的对象是否与set中已有的对象相等。 如果对象相等,则它不会将添加到集合中,否则它会将对象添加到集合中。