java - 对象集包含具有值的对象(不是引用)(java 7)

标签 java set contains

我的对象有一些领域。

public class MyObject{

   private String a;
   private String b;

}

我有一个包含这样的对象的集合:

Set<MyObject> thirdSet = new HashSet<MyObject>();

Set<MyObject> firstSet=getFirstSet();

Set<MyObject> secondSet = getSecondeSet();


for (MyObjectobj : firstSet) {
  if (!secondSet.contains(obj)) {
    thirdSet.add(obj);
  }
}

我需要将第二个集合中不包含的所有对象选择到第三个集合中(其值不是通过引用的对象) 是否可以或者使用集合更好?

最佳答案

您需要重写对象中的 equals 和 hashcode 方法。如果可以的话,我建议使用 java 7 Objects 实用方法来防止 NullPointerExceptions。

@Override
public boolean equals(Object other) {
    if (!(other instanceof MyObject)) {
        return false;
    }
    MyObject that = (MyObject) other;
    return Objects.equals(a, that.a) && Objects.equals(b, that.b);
}

@Override
public int hashcode() {
    Objects.hash(a, b);
}

如果可能的话,我还建议您查看第三方库 Guava,这会简化您的代码。

Set<MyObject> thirdSet = new HashSet<>(Sets.difference(firstSet, secondSet));

注意将其包装在新的 HashSet 中,以便可以修改它(如果不需要修改它,可以将其删除)

关于java - 对象集包含具有值的对象(不是引用)(java 7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43210407/

相关文章:

python - 如何在 Python 数据框中查找不共享公共(public)日期(或索引)的行

jquery - 如何使用:contains() Selector to determine the object has a certain keyword when it is clicked?

javascript - 查找 id 包含两个子字符串的元素

c# - 仅包含部分工作的 C#、MVC

java - ExecutorService 可能在调用线程上执行?

java - 使用 Java 连接到 Oracle 数据库

java - 如何包装子类的Collection对象?

java - 二维映射中的迭代器

c++ - 如何在 std::set 中选择随机元素?

algorithm - 集合的每个子集的最小和最大元素的或之和