Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有一种简单的方法可以从两个链表中删除相同的对象?_Java_Linked List_Object State - Fatal编程技术网

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

Java 有没有一种简单的方法可以从两个链表中删除相同的对象?,java,linked-list,object-state,Java,Linked List,Object State,我有两个链表 我在这两个列表中都有相同的对象。相同的对象是指对象具有相同的状态,但被不同的对象指针引用 我可以调用.remove(对象)从第一个列表中删除它,但如果我对第二个列表执行相同操作,则不会删除它(因为对象指针引用不同) 有没有一种简单的方法可以从各种列表中删除具有相同状态的对象 考虑一下,我可能会循环第二个列表,比较对象的状态,但我正在寻找一种更干净的方法覆盖对象的equals方法。如果它们具有相似的等效功能,则应从两个列表中正确删除它们 编辑-为了正确起见: 重写equals方法时,

我有两个链表

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

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

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


考虑一下,我可能会循环第二个列表,比较对象的状态,但我正在寻找一种更干净的方法

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

编辑-为了正确起见:


重写equals方法时,应始终重写hashCode方法。如果不这样做,列表中可能不会显示任何奇怪的功能,但是一旦您尝试在HashMap中使用相同的对象,您可能会发现remove或put的功能可能与您所希望的不一样。

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

如果链表得到了正确的实现,那么在内存中指向不同对象的事实不应该阻止它工作。根据,删除方法为:

…删除索引i最低的元素,以便(o==null?get(i)==null:o.equals(get(i))(如果存在这样的元素)


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

不要忘记重写hashCode()