【问题标题】:Removing an arrayList object Java [duplicate]删除arrayList对象Java [重复]
【发布时间】:2017-08-02 03:58:18
【问题描述】:

我有这个方法用来从 SetOfBooks 类中删除一本书。我也试过循环和删除,也用谷歌搜索。这不会删除我传递的 Book 对象并返回 false,我无法弄清楚我哪里出错了。我想要从列表中删除给定对象的方法。 请帮忙。谢谢你

以下是我调用 removebook() 方法的代码。

【问题讨论】:

  • 真正的问题是什么?
  • 我怀疑你的意思是public class SetOfBooks extends Vector<Book> {,而不是public class SetOfBooks<Book> extends Vector<Book> {。在后一种情况下,Book 是一个类型变量,而不是 Book 类。
  • 我认为您需要创建并发布一个像样的minimal reproducible example 以获得像样的答案。附带问题:您是否在 Book 类中正确覆盖了 equals 和 hashCode?​​span>
  • remove 使用indexOf 来定位元素的位置,但indexOf 使用equals 方法来确定搜索到的对象是否与当前查看的对象相同。问题是,如果您不在 Book 中覆盖 equals 方法,它将从其超类继承,在您的情况下是 Object,并且在那里使用的实现只是使用 == 来查看两个引用是否相等,而不是如果两个对象代表相同的状态。
  • 是的,我是对的——您没有覆盖这两个关键方法,equals 和 hashCode。请继续阅读,然后解决此问题。

标签: java arraylist


【解决方案1】:

您可能没有覆盖Book 类中的equals(和hashcode)方法。

如果不覆盖 equals,则只会从使用 remove 的集合中删除完全相同的对象。

【讨论】:

  • 当根据合同覆盖equalshashCode 时,请特别注意borrower 等潜在可变字段。通过 IDE 自动生成的这些方法的实现,所有这些字段都包括在内。如果你有例如代码中的一个地方,您不知道借阅者并构造书籍对象以查找或删除实际上有借阅者的“真实”书籍,这也行不通。
猜你喜欢
  • 2013-12-24
  • 2014-07-12
  • 2015-08-25
  • 1970-01-01
  • 1970-01-01
  • 2016-04-11
  • 1970-01-01
  • 2020-12-17
  • 1970-01-01
相关资源
最近更新 更多