gpt4 book ai didi

java - 集合的唯一性

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:48:57 26 4
gpt4 key购买 nike

如果我以 HashSet<E> 为例, 并向其添加对象,它如何检查对象是否已经存在?

我有以下简单设置:

private class MyObject {
String text;

public MyObject(String text) {
this.text = text;
}

@Override
public boolean equals(Object o) {
if (o != null && o instanceof MyObject) {
return ((MyObject) o).text.equals(text);
}

return false;
}

}

在我的项目中,我有很多这样的对象,但都是单独初始化的。我想通过将所有内容添加到 Set 来过滤 double ,像这样:

MyObject m1 = new MyObject("1");
MyObject m2 = new MyObject("1");
MyObject m3 = new MyObject("2");

System.out.println(m1.equals(m2)); //expected: true, result: true
System.out.println(m1.equals(m3)); //expected: false, result: false

Set<MyObject> myObjects = new HashSet<MyObject>();
myObjects.add(m1);
myObjects.add(m2);
myObjects.add(m3);

System.out.println(myObjects.size()); //expected: 2, result: 3

Set<String> stringList = new HashSet<String>();
stringList.add("1");
stringList.add("1");
stringList.add("2");
System.out.println(stringList.size()); //expected: 2, result: 2

我怎样才能使我的 myObjects set 不包含这些 double ?所以m1m2是不同的实例,但具有相同的内容,所以我只需要 m1 .

编辑
根据 Mathias Schwarz 的回答,我实现了 hashCode()功能如下:

@Override
public int hashCode() {
return text.hashCode();
}

但是如果我有一个包含多个字段的更复杂的类,我该如何实现这个方法呢?

最佳答案

HashSet 根据对对象调用equalshashCode 的结果判断两个对象是否相同。如果您实现 equals,则必须实现 hashCode。如果它们不一致,HashSet 将无法正常运行...所以重要的是这两个方法是如何在 MyObject 上实现的(顺便说一句,这实际上是一个类...)。

关于java - 集合的唯一性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12857882/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com