有没有一种简单的方法可以从2个链接列表中删除相同的对象?

时间:2010-11-02 15:38:48

标签: java linked-list object-state

我有2个链接列表。

我在这两个列表中都有相同的对象。同一个对象,我的意思是对象具有相同的状态,但是由不同的对象指针引用。

我可以从第一个列表中调用.remove(object);来删除它,但如果我对第二个列表执行相同操作,则不会删除它(因为对象指针引用不同)

是否有一种简单的方法可以从各种列表中删除具有相同状态的对象?

考虑到这一点,我可能会在第二个列表中循环比较其对象的状态,但我正在寻找一种更清洁的方式

3 个答案:

答案 0 :(得分:3)

覆盖对象的equals方法。如果它们具有相似的等效功能,则应从两个列表中正确删除它们。

编辑 - 为了纠正:

重写equals方法时,应始终覆盖hashCode方法。如果不这样做可能不会在列表中显示任何奇怪的功能,但是一旦您尝试在HashMap中使用相同的对象,您可能会发现删除或放置可能不像您想要的那样。

答案 1 :(得分:0)

如果对象具有相同的状态,那么覆盖它们的equals和hashCode方法以反映这一点可能是正确的。如果对象与equals方法相同,则可以在两个列表上调用remove。

如果链接列表正确实现,则在内存中指向不同对象的事实不应阻止它工作。根据{{​​3}},删除方法:

  

...删除具有最低索引i的元素,使得(o == null?get(i)== null:o.equals(get(i)))(如果存在这样的元素)...

答案 2 :(得分:0)

您必须覆盖对象上的equals()hashCode()。当这些未被覆盖时,默认行为是比较对象标识,即参考。当您重写等于时,您可以将比较更改为基于对象状态,即逻辑上相等。重要的是要记住也要覆盖hashCode,就好像这样做不成功,当你在HashSet或HashTable中使用对象时,它会导致奇怪的行为。