首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >HashSet包含对象

HashSet包含对象
EN

Stack Overflow用户
提问于 2014-12-01 21:56:30
回答 6查看 11.8K关注 0票数 3

我使用重写的equal方法创建了自己的类,该方法只检查名称(类中的属性)是否相等。现在,我将该类的一些实例存储在HashSet中,以便在HashSet中不存在具有相同名称的实例。

我的问题是:如何能够检查HashSet是否包含这样的对象。.contains()在这种情况下不能工作,因为它与.equals()方法一起工作。我想检查它是否真的是同一个对象。

编辑:

代码语言:javascript
运行
复制
package testprogram;

import java.util.HashSet;
import java.util.Set;

public class Example {
    private static final Set<Example> set = new HashSet<Example>();
    private final String name;
    private int example;

    public Example(String name, int example) {
        this.name = name;
        this.example = example;
        set.add(this);
    }

    public boolean isThisInList() {
        return set.contains(this);
        //will return true if this is just equal to any instance in the list
        //but it should not
        //it should return true if the object is really in the list
    }

    public boolean remove() {
        return set.remove(this);
    }

    //Override equals and hashCode
}

对不起,我的英语能力不太好。如果你不明白我的意思,请再问一遍。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-12-01 22:03:38

在您的情况下,判断对象的一个特定实例是否包含在HashSet中的唯一方法是迭代HashSet的内容,并比较对象标识(使用==操作符而不是equals()方法)。

类似于:

代码语言:javascript
运行
复制
boolean isObjectInSet(Object object, Set<? extends Object> set) {
   boolean result = false;

   for(Object o : set) {
     if(o == object) {
       result = true;
       break;
     }
   }

   return result;
}
票数 2
EN

Stack Overflow用户

发布于 2014-12-01 22:08:57

检查对象是否是同一个对象的方法是将它们与==进行比较,以查看对象引用是否相等。

亲切的问候,弗兰克

票数 2
EN

Stack Overflow用户

发布于 2014-12-01 22:01:26

您还必须重写hashCode方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27238093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档