重写equals方法呀
现在小学三年级就学这些东西了,太牛了
应该是要严格相等才行,元素顺序不对也不行
你要问问题 最起码得写得让人愿意回答呀
描述和代码放在一坨
就是写到代码块里 也算你真心想问
不要把想帮你的人当成免费劳动力 不用白不用
deepin23集成了UOS AI,这个直接问AI 就好了
在 Java 中,List.containsAll(Collection c)
方法检查调用该方法的列表(在这个例子中是 sublist
)是否包含指定集合(accounTantBookTempNumberList
)中的所有元素。然而,这里的关键是理解“包含”的含义。在这个上下文中,“包含”意味着 sublist
中必须有与 accounTantBookTempNumberList
中每个元素相等(通过 equals
方法)的对象。
在你的情况下,即使 sublist
和 accounTantBookTempNumberList
中的元素看起来具有相同的字段和值,但如果 AccounTantTemp
和 AccounTantBookTemp
类没有正确覆盖 equals
方法和 hashCode
方法,那么 Java 默认会使用对象的内存地址来比较它们,这通常会导致 containsAll
方法返回 false
。
默认情况下,Java 类的 equals
方法是从 Object
类继承的,该方法比较的是对象的内存地址(即是否是同一个对象的引用)。由于 AccounTantTemp
和 AccounTantBookTemp
是不同的类,即使它们的字段值和类型相同,它们的默认 equals
方法也会认为它们是不相等的。
要解决这个问题,你需要在 AccounTantTemp
和 AccounTantBookTemp
类(或者如果它们是相关类并且可以通过某种方式被视为相等,则只在一个类中)中覆盖 equals
和 hashCode
方法。这两个方法应该基于你认为相等的标准来比较对象(在这个案例中,可能是所有相关字段的相等性)。
例如,如果你认为只要 accNumber
、cnyDebitLedgerNumber
、cnyCreditLedgerNumber
等字段相同,两个对象就应该被认为是相等的,你应该在类中这样覆盖 equals
和 hashCode
方法:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
AccounTantTemp that = (AccounTantTemp) o;
return Objects.equals(accNumber, that.accNumber) &&
Objects.equals(cnyDebitLedgerNumber, that.cnyDebitLedgerNumber) &&
Objects.equals(cnyCreditLedgerNumber, that.cnyCreditLedgerNumber) &&
// 添加其他相关字段的比较
true;
}
@Override
public int hashCode() {
return Objects.hash(accNumber, cnyDebitLedgerNumber, cnyCreditLedgerNumber);
// 同样,添加其他相关字段到哈希计算中
}
注意:如果你决定在 AccounTantTemp
中覆盖这些方法,并且希望 AccounTantBookTemp
实例也能被视为相等(这假设这两个类是逻辑上等价的),你可能需要在 AccounTantTemp
的 equals
方法中做额外的类型检查,并相应地处理 AccounTantBookTemp
对象。然而,这通常不是最佳实践,因为它破坏了封装和类的独立性。更好的做法是在逻辑上等价的类中各自覆盖 equals
和 hashCode
方法,或者使用另一个共同的接口或父类来实现这些方法。
看不懂了
我也看不懂
求助,我这边建立了两个list集合,分别是sublist,元素是AccounTantTemp(depNumber=1111, accNumber=20240917, bankBranches=756001, cnyDebitLedgerNumber=60110511, cnyDebitLedger=吸收存款-个人活期储蓄存款, cnyDebitCurrency=CNY, cnyDebitCashe=C, cnyDebitMoney=33.0, cnyDebit=0, cnyCreditLedgerNumber=40020306, cnyCreditLedger=货币兑换-结售汇-银行与个人间结售汇, cnyCreditCurrency=CNY, cnyCreditCashe=C, cnyCreditMoney=33.0, cnyCredit=1, usdDebitLedgerNumber=null, usdDebitLedger=null, usdDebitCurrency=null, usdDebitCashe=null, usdDebitMoney=null, usdDebit=null, usdCreditLedgerNumber=null, usdCreditLedger=null, usdCreditCurrency=null, usdCreditCashe=null, usdCreditMoney=null, usdCredit=null)
另外一个是另外一个是accounTantBookTempNumberList,元素是AccounTantBookTemp(accNumber=20240917, cnyDebitLedgerNumber=60110511, cnyDebitLedger=吸收存款-个人活期储蓄存款, cnyDebitCurrency=CNY, cnyDebitCashe=C, cnyDebit=0, cnyCreditLedgerNumber=40020306, cnyCreditLedger=货币兑换-结售汇-银行与个人间结售汇, cnyCreditCurrency=CNY, cnyCreditCashe=C, cnyCredit=1, usdDebitLedgerNumber=null, usdDebitLedger=null, usdDebitCurrency=null, usdDebitCashe=null, usdDebit=null, usdCreditLedgerNumber=null, usdCreditLedger=null, usdCreditCurrency=null, usdCreditCashe=null, usdCredit=null),
为何他们sublist.containsAll(accounTantBookTempNumberList)结果是false呢,不应该是true吗
两个都分别是两张表查询出来的数据,
idea 调试图片.zip