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

集合之间的不对称差异

卓瀚
2023-03-14

我正在处理两组包含我创建的复杂java对象的数据。假设包含的元素是People.java类型的,它有一个字符串名称和一个int age。假设我有这些集:

Set1=[{James,25},{Arthur,18},{Anne,22}]

Set2=[{Arthur,18},{James,25}]

我试图得到set1和set2之间的不对称差,所以这个差的结果是{Anne,22}。我尝试过将元素存储在hashset中并使用set1。移除所有(set2),但答案等于set1。需要注意的是,每个元素都是一个不同的实例,这意味着我在set1中为{James,25}创建了一个Person对象,在set2中为{James,25}创建了一个新的Person对象(它们是不同实例的原因之一,因为我简化了项目的目标)。

我还尝试了谷歌的番石榴差异,但答案仍然与set1相同。

我有两个问题:1)为什么会这样?是因为它们是不同的实例,所以removeAll过程认为它们是不同的吗?2) 在这种情况下,获得不对称差异的好方法是什么?我在用比较器猜测,但我愿意接受建议。

谢谢

共有3个答案

麻华辉
2023-03-14

不重写hasCode()等于(对象人)

对象1{Arthur,18}和对象2{Arthur,18}具有相同的值将被视为不同。

当你重写下面的方法

public int hashCode()
public boolean equals(Object other)

那么满足这种方法的对象将被认为是相同的,并将占据集合,

汲灿
2023-03-14

你的方法很好,但你可能忘了

@Override
public int hashCode()

@Override
public boolean equals(Object other)
郎宏浚
2023-03-14

您必须没有覆盖equals(和/或hashCode),因此您的Person实例是按引用而不是按值进行比较的。这样做应该(在Person类中):

@Override
public boolean equals(Object o) {
    if (o instanceof Person) {
        Person p = (Person) o;
        return name.equals(p.name) && age == p.age;
    }
    return false;
}

@Override
public int hashCode() {
    return Arrays.asList(name, age).hashCode();
}

使用适当的equalshashCode,您应该能够简单地使用set1。移除所有(set2)以获得所需的结果。

 类似资料:
  • 本文向大家介绍java计算集合对称差的示例代码,包括了java计算集合对称差的示例代码的使用技巧和注意事项,需要的朋友参考一下 序 本文简单介绍下计算集合对称差的几种方法。 maven 对称差 两个集合的对称差是只属于其中一个集合,而不属于另一个集合的元素组成的集合。 集合A和B的对称差通常表示为AΔB,对称差的符号在有些图论书籍中也使用符号⊕来表示。例如:集合{1,2,3}和{3,4}的对称差为

  • 问题内容: 我想知道是否有一种快速/干净的方法来获得两组之间的对称差异? 我有: 我需要类似的东西: 为了澄清我需要 对称的 区别。 问题答案: 您可以使用Google Guava库中的一些功能(这确实很棒,我强烈推荐!): 差异()和symmetricDifference()的 Javadocs 确实满足您的要求,但通常也有帮助。 两种方法都返回实时视图,但是例如您可以调用结果集以获得不变的集。

  • 我想计算文本语料库中单词的词频。我一直在使用NLTK的word_tokenize,后跟概率。FreqDist一段时间来完成这项工作。单词_tokenize返回一个列表,该列表由FreqDist转换为频率分布。然而,我最近在collections(collections.Counter)中遇到了计数器函数,它似乎在做完全相同的事情。FreqDist和Counter都有一个最常用(n)函数,返回n个最

  • 我有这样的Excel数据: 我想在ColumnA中找到Columnb中不存在的记录。

  • 我正在尝试添加模块依赖项。 当我写作时, 执行项目(`:服务') 它向我展示了一些错误,比如, 无法解决":app@debugUnitTest /compileClasspath"的依赖关系:无法解决项目:服务。 和, 相同:app@debugAndroidTest/compileClasspath,:app@debug/compileClasspath和:app@release/编译路径 但是,

  • sdiff key1 key2...keyN 返回所有给定key的差集 sdiffstore dstkey key1...keyN 同sdiff,并同时保存差集到dstkey下