一、Listcontains方法去重
示例代码如下:
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<String> 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<String> collectionDistinct(List<String> list) { List<String> result = new ArrayList<>(); for (String data : list) { // containstlist方法去重复 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<String> 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<String> collectionDistinct(List<String> 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<String> 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<String> collectionDistinct(List<String> list) { return list.stream().distinct().collect(Collectors.toList()); }}
程序执行结果:
耗时:51毫秒
四、总结
我们推荐使用Hashset机制和Stream流distinct方法来实现去重。