好久没有过这个需求,需求很简单:去除一个List里面的重复对象。
首先回顾一下一个很基础的知识点:1、Collection接口里面有一个toArray()方法,这个方法可以把该集合变成数组,而Arrays.asList(T... a)方法又可以把数组变成集合。这意味着所有实现了Collection接口的类都可以互相转换。(如有错请指正)
2、List有序,可重复。Set无序,不可重复。
那么解决方法就很简单了,直接把List转为Set,它就去除了重复元素,再把Set转回List:
public static void main(String[] args) {
List<Integer> a = new ArrayList<Integer>();
a.add(1);
a.add(1);
a.add(2);
a.add(2);
a.add(2);
a.add(3);
a.add(3);
System.out.println(a);
System.out.println("转换后");
System.out.println(new ArrayList<Integer>(new HashSet<Integer>(a)));
}
---------------------------------------打印----------------------------------------
[1, 1, 2, 2, 2, 3, 3]
转换后
[1, 2, 3]
转换后
[1, 2, 3]
我们发现重复的Integer对象被去除了。
但是如果我们集合里面装的是自定义的类呢,Set怎么识别我的对象是否重复?
那有必要回顾一下第三个基础知识点:
判断两个对象是否重复对象,需要调用hashCode()和equals()方法来对比。集合中是先调用hashCode对比,必须同时满足hashCode相等且equals为true,集合才会认为是同一个元素(有错请指正)。
那么问题就迎刃而解了:
在我们自定义的类里重写hashCode和equals方法!