【问题标题】:Java: List insert of more than one object with same HASHJava:列出具有相同HASH的多个对象的插入
【发布时间】:2011-11-25 12:04:17
【问题描述】:

这个我有点麻烦:

我需要重写 hashCode() 和 equals(),导致一些对象“相等”。这是预期的行为,但我在收藏方面存在附带问题(已预料到......):

我使用 ArrayList,并且在预定义索引处插入重复对象不受 insert 方法的支持。相反,它被插入到第一个重复的现有元素的 PREVIOUS 位置。

Let's say i have
A
B
C

我在索引 >0 处插入 A 的副本...

it will be inserted at index 0.
->A
A
B
C

这是正常行为吗?

谢谢。

编辑:对象被插入到正确的位置。 我正在使用的 TableViewer (org.eclipse.jface.viewers.TableViewer) 让我感到困惑,因为它默认编辑为第一个重复的元素(这是有道理的......)。

【问题讨论】:

  • 您确定您没有将新插入的对象与其先前插入的副本混淆吗?您如何区分两者。
  • 我刚试过,它确实可以正常工作。其他一切都将是一场真正的灾难 :-) 也许您可以发布代码?
  • 是的。你说得对。刚刚做了一个完整的调试。对象被插入到正确的位置。我正在使用的 TableViewer(org.eclipse.jface.viewers.TableViewer)让我感到困惑,因为它默认编辑为第一个重复的元素(这很有意义......)。谢谢。

标签: java list collections hash


【解决方案1】:

我认为在列表中它是否重复并不重要。

我认为这取决于我们是否正在做(至于他们最终会在列表中的哪个位置)-

list.add(obj);
//or
list.add(index, obj);
//or
list.set(index, obj);

除了 List 之外,它是我们将对象添加到列表中的顺序。

因为如果我们有类似的列表

List list = ArrayList();

我们添加什么类型的对象并不重要,所以我们是否定义了hashCodeequals 没有任何区别。

【讨论】:

    【解决方案2】:

    不,这不正常。

    据我所知,java.util.List 的实现没有使用 equals() 或 hasCode() 方法

    你能提供一些代码吗?

    您可能正在查看您之前插入的第一个 A?

    A // prevously inserted 
    B 
    C 
    A // the new duplicat
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-18
      • 2020-05-05
      • 2022-01-10
      • 2020-06-15
      • 1970-01-01
      • 2022-08-03
      • 2014-11-11
      • 1970-01-01
      相关资源
      最近更新 更多