如何从java arraylist中删除重复的对象[重复]
Posted
技术标签:
【中文标题】如何从java arraylist中删除重复的对象[重复]【英文标题】:how to remove duplicate objects from java arraylist [duplicate] 【发布时间】:2015-08-25 00:55:53 【问题描述】:我需要从我的对象数组列表中删除重复的对象。我通过制作对象数组列表来尝试它。第一个包含所有对象,包括重复的对象,另一个只包含唯一的对象。
ArrayList<ListTableClass> ltc = new ArrayList<ListTableClass>();//has duplicate
ArrayList<ListTableClass> ltc2 = new ArrayList<ListTableClass>();//unique
我使用 contains 方法来检查这样的重复项:
for (ListTableClass element : ltc)
if (!ltc2.contains(element))
ltc2.add(element);
但这不会删除重复项。它将 ltc 的所有元素添加到 ltc2。不知道为什么? ltc 确实包含重复的对象。
【问题讨论】:
也看看***.com/questions/2642589/… 【参考方案1】:由于ArrayList的函数“contains”与两个对象的函数hashcode & equals进行比较,所以必须重写Class ListTableClass的函数“hashCode”&“equals”。
示例:
import java.util.ArrayList;
public class ListTableClass
private String name;
private int age;
public ListTableClass(String name, int age)
super();
this.name = name;
this.age = age;
public static void main(String[] args)
ArrayList<ListTableClass> ltc = new ArrayList<ListTableClass>();// has duplicate
ListTableClass obj0 = new ListTableClass("A", 0);
ListTableClass obj1 = new ListTableClass("B", 1);
ListTableClass obj2 = new ListTableClass("C", 2);
ListTableClass obj3 = new ListTableClass("A", 0);
ltc.add(obj0);
ltc.add(obj1);
ltc.add(obj2);
ltc.add(obj3);
ArrayList<ListTableClass> ltc2 = new ArrayList<ListTableClass>();// unique
for (ListTableClass element : ltc)
if (!ltc2.contains(element))
System.out.println(element);
ltc2.add(element);
覆盖hashCode之前的输出:
y2015.m06.d10.ListTableClass@659e0bfd //obj0 "A", 0
y2015.m06.d10.ListTableClass@2a139a55 //obj1 "B", 1
y2015.m06.d10.ListTableClass@15db9742 //obj2 "C", 2
y2015.m06.d10.ListTableClass@6d06d69c //obj3 "A", 0 is different from obj0
添加覆盖函数hashCode:
@Override
public int hashCode()
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
@Override
public boolean equals(Object obj)
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ListTableClass other = (ListTableClass) obj;
if (age != other.age)
return false;
if (name == null)
if (other.name != null)
return false;
else if (!name.equals(other.name))
return false;
return true;
那么输出是:
y2015.m06.d10.ListTableClass@402 //obj0
y2015.m06.d10.ListTableClass@422 //obj1
y2015.m06.d10.ListTableClass@442 //obj2
没有obj3,因为obj3的hashcode &它的属性和obj0相等
【讨论】:
以上是关于如何从java arraylist中删除重复的对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章
删除 Java ArrayList 中的重复对象会导致并发修改错误 [重复]