如何在java中从数组表中删除重复的对象?

110 阅读1分钟

这个简短的教程讲述了如何存储唯一的对象以避免java列表中的重复?

在实时场景中,你会遇到在列表中出现重复对象的情况。
没有java集合的List实现来解决这个问题。

在集合中,List允许重复的值保持插入的顺序,而Set不允许重复,不保持顺序

为了实现这一点,我们可以通过多种方式来实现。

apache common-collection API提供了org.apache.commons.collections4.list.SetUniqueList 类,该类包含SetUniqueList ,用于从数组列表中移除重复的值,并返回没有重复的新列表。

import java.util.*;
import org.apache.commons.collections4.list.SetUniqueList;

public class Main {
    public static void main(String[] args) {
        ArrayList list=new ArrayList<>();
        list.add("one");
        list.add("two");
        list.add("three");
        list.add("four");
        list.add("one");
        System.out.println(list);

        List result = SetUniqueList.setUniqueList(list);

        System.out.println(result);

    }
}

使用LinkedHashSet

LinkedHashSet 是Set的实现,它不允许重复,并保持插入的顺序。

以下是一系列的步骤

  • 创建一个有重复值的ArrayList
  • 接下来,创建LinkedHashSet对象,将列表传递给构造函数
  • 返回没有重复的结果
import java.util.*;

public class Main {
    public static void main(String[] args) {
        ArrayList list=new ArrayList<>();
        list.add("one");
        list.add("two");
        list.add("three");
        list.add("four");
        list.add("one");
        System.out.println(list);
        LinkedHashSet result = new LinkedHashSet<>(list);
        System.out.println(result);

    }
}

输出

[one, two, three, four, one]
[one, two, three, four]

Java8引入了流API来处理集合API。它有distinct() 方法,删除重复的值,最后使用collect 参数返回列表。

import java.util.*;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        ArrayList list=new ArrayList<>();
        list.add("one");
        list.add("two");
        list.add("three");
        list.add("four");
        list.add("one");
        System.out.println(list);

        List result = list.stream()
                .distinct()
                .collect(Collectors.toList());
        System.out.println(result);

    }
}
  • 我们可以通过扩展List实现和实现Set接口来编写我们自己的set和list实现。
  • 你可以不考虑实现List,因为Set已经实现了。你可以考虑扩展ArrayList,因为它不是最终的。
  • 为此,你需要覆盖Add方法和hashcode方法,以实现无重复和无顺序。

结语

总而言之,你可以用LinkedHashSet,SetUniqueList 和Java8流distinct 方法来删除重复的元素。