ArrayList元素怎么去重的两种方法

方法1,通过Set实现类包裹一层返回,缺点是会打乱原有集合的顺序

public static <T> List<T> listRepeatUseSet(List<T> list){
    HashSet<T> hashSet = new HashSet<>(list);
    return new ArrayList<>(hashSet);
}

 方法2,新建一个新的ArrayList集合,这里不能指定大小因为当前传递过来的集合是有重复的所以长度大小是不正确的,如果当前传递过来的ArrayList集合中的元素是自定义数据那么需要重写equals和hashCode方法,其实当前场景只需要重写equals方法因为要使用到ArrayList中的contains方法,而这个方法中底层是使用对象的equals方法做比较。

public static <T> List<T> listRepeatUseIteration(List<T> list){
    List<T> arrayList = new ArrayList<>();
    ListIterator<T> listIterator = list.listIterator();
    while (listIterator.hasNext()) {
        T next = listIterator.next();
        if(!arrayList.contains(next)){
            arrayList.add(next);
        }
    }
    return arrayList;
}

猜你喜欢

转载自www.cnblogs.com/alonely/p/12285735.html