当前位置: 首页 > 知识库问答 >
问题:

是否可以在hashset中输入重复的值?

胥智
2023-03-14

我试图通过修改hashCode()和equals()方法()在HashSet中添加重复的值?

我试过下面的代码

public class dupSet {
    static Set set= new HashSet();
    @Override
    public int hashCode() {
        return (int) (100*Math.random());
    }
    @Override
    public boolean equals(Object obj) {
        return false;
    }
    public static void main(String[] args) throws ParseException {
        set.add("a");
        set.add("b");
        set.add("a");
      System.out.println(set);
    }

}

根据我的理解,如果有两个“a”的副本,HashSet将首先获得hashCode()以获得正确的bucket,然后检查equals()的值,如果equals返回true,则不会添加,但如果返回false,则会添加。因此,为了向我的集合添加重复值,我重写equals(),它总是返回false,但仍然Set不允许重复值?

共有1个答案

缪坚诚
2023-03-14

hashcode方法始终返回零。请查看math.random()的范围。

其次,不重写添加元素的equalshashcode。您实际上添加了一个字符串。要使事情正常工作,您必须实现一个类,并将该类的实例添加到hashset中。实现的类需要重写equalshashset方法,而不是主类。

第三,正如评论中所说,你不应该做你正在做的事情。您真正需要的是arraylist。通过以这种方式实现equalshashcode方法,基本契约就被打破了。

 类似资料:
  • 我想知道OpenCV是否能够将摄像头(dev/video1)设置为复合或S-video输入。 我使用的摄像头仅在复合输入中运行,但默认情况下,v4l2在S-Video输入中打开dev/video1。V4l2能够通过QT V4l2 utils应用程序从S视频转换为复合输入。 opencv正在使用v4l从相机捕获图像,我想在代码中使用OpenCV更改为复合输入。那有可能吗?如果不是,解决办法是什么?

  • 我想检查我的数组是否包含值输入,我想要类似的东西,有人知道如何做吗?

  • 请考虑下面的代码: 将给出1,因为HashSet不允许重复,所以只存储一个元素。 我想知道如果我们添加了重复的元素,那么它是替换了前面的元素,还是根本没有添加它? 另外,对于相同的情况,使用会发生什么?

  • 问题内容: 我想在我的html代码中的复选框和单选框的背景上放置一个图像,但是它不起作用,但是可以在其他表单属性上起作用。 问题答案: 我找到了如何使用纯CSS 将图像提供给 复选框 和 单选 按钮的方法。 HTML CSS

  • 在模板中使用自定义管道时,如下所示: 而且效果很好。 但它表明 用户名未定义

  • 问题内容: 这个问题已经在这里有了答案 : 如果/否则列表理解 (11个答案) 去年关闭。 这是我试图变成列表理解的代码: 有没有一种方法可以将else语句添加到此理解中? 问题答案: 语法是Python中的三元运算符,其条件为true;否则为。可以在理解语句中使用: 因此,对于您的示例,