【问题标题】:Alternative List Data Structure替代列表数据结构
【发布时间】:2017-02-13 16:50:54
【问题描述】:

我目前有一个List 的对象。通过以下方式删除对象:

if (mProducts.contains(orderProduct)) {
   mProducts.remove(orderProduct);
   .
   . 

但是List 的 javadocs 声明

从这个 {@code List} 中删除指定对象的第一个匹配项。

我需要从列表中删除 given 对象,而不仅仅是第一个对象。这里的正确方法是什么?我可以提供自己的 List.remove 实现或使用替代数据结构吗?

谢谢, 水獭

【问题讨论】:

  • "第一次出现指定的对象" 如果你指定一个特定的对象并且它在列表中找到两个相同的对象,它将只删除第一个 - 而不是列表中的第一个项目。你能提供一个不符合你期望的例子吗?
  • 这两个对象有什么不同吗?为什么你需要专门为 2 保留一个?
  • 无需深入实施,这些对象就是 OrderProducts。我发现当 OrderProducts 是同一个产品时,它们被视为相等,但我需要检查其他属性(自定义列表)以确定相等性。
  • 为此,您需要覆盖 OrderProducts 类的 equals() 和 hashcode() 方法 - 这些方法根据您的定义确定对象何时“相同”。

标签: java android list data-structures


【解决方案1】:

在 Java 中,List 使用 equals() 作为其 contains 和 remove(Object o) 方法,如 here 所述

在答案 cmets 之一中,还指出 Java 使用参考比较作为默认值。

也许您可以为您的产品重写 equals() 方法以获得您想要的。

【讨论】:

  • 谢谢!事实证明,在覆盖的 equals() 中添加额外的逻辑正是我所需要的;我想错了这个问题。
猜你喜欢
  • 1970-01-01
  • 2011-10-03
  • 2018-11-03
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 2019-05-25
  • 1970-01-01
相关资源
最近更新 更多