Java集合去重的几种方法

一、List的contains方法去重

示例代码如下:

import java.util.ArrayList;
import java.util.List;

/**
 * @author qinxun
 * @date 2023-06-13
 * @Descripion: List集合去重
 */
public class RepeatDemo {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        // 准备一个有2w数据的集合,其中有一半是存在重复的数据
        List list = new ArrayList<>();
        for (int i = 1; i <= 10000; i++) {
            list.add(String.valueOf(i));
        }
        for (int i = 10000; i >= 1; i--) {
            list.add(String.valueOf(i));
        }
        System.out.println(list);
        System.out.println(collectionDistinct(list));
        long end = System.currentTimeMillis();
        // 输出 耗时:187毫秒
        System.out.println("耗时:" + (end - start) + "毫秒");
    }

    /**
     * List去重
     *
     * @param list List集合
     * @return 去重后返回到集合数据
     */
    private static List collectionDistinct(List list) {
        List result = new ArrayList<>();
        for (String data : list) {
            // list的contains方法去重
            if (!result.contains(data)) {
                result.add(data);
            }
        }
        return result;
    }
}

程序执行结果:

耗时:187毫秒

二、使用HashSet去重

示例代码如下:

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;

/**
 * @author qinxun
 * @date 2023-06-13
 * @Descripion: List集合去重
 */
public class RepeatDemo {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        // 准备一个有2w数据的集合,其中有一半是存在重复的数据
        List list = new ArrayList<>();
        for (int i = 1; i <= 10000; i++) {
            list.add(String.valueOf(i));
        }
        for (int i = 10000; i >= 1; i--) {
            list.add(String.valueOf(i));
        }
        System.out.println(list);
        System.out.println(collectionDistinct(list));
        long end = System.currentTimeMillis();
        // 输出 耗时:15毫秒
        System.out.println("耗时:" + (end - start) + "毫秒");
    }

    /**
     * List去重
     *
     * @param list List集合
     * @return 去重后返回到集合数据
     */
    private static List collectionDistinct(List list) {
        return new ArrayList<>(new HashSet<>(list));
    }
}

程序执行结果:

耗时:15毫秒

三、使用Stream流的distinct方法去重

示例代码如下:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author qinxun
 * @date 2023-06-13
 * @Descripion: List集合去重
 */
public class RepeatDemo {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        // 准备一个有2w数据的集合,其中有一半是存在重复的数据
        List list = new ArrayList<>();
        for (int i = 1; i <= 10000; i++) {
            list.add(String.valueOf(i));
        }
        for (int i = 10000; i >= 1; i--) {
            list.add(String.valueOf(i));
        }
        System.out.println(list);
        System.out.println(collectionDistinct(list));
        long end = System.currentTimeMillis();
        // 输出 耗时:15毫秒
        System.out.println("耗时:" + (end - start) + "毫秒");
    }

    /**
     * List去重
     *
     * @param list List集合
     * @return 去重后返回到集合数据
     */
    private static List collectionDistinct(List list) {
        return list.stream().distinct().collect(Collectors.toList());
    }
}

程序执行结果:

耗时:51毫秒

四、总结

我们推荐使用HashSet机制实现去重。

你可能感兴趣的:(Java入门,java,数学建模,开发语言)