Java集合List去重的几种方式「建议收藏」

Java集合List去重的几种方式「建议收藏」1、使用LinkedHashSet删除arraylist中的重复数据LinkedHashSet是在一个ArrayList删除重复数据的最佳方法。LinkedHashSet在内部完成两件事: 删除重复数据 保持添加到其中的数据的顺序 Java示例使用LinkedHashSet删除arraylist中的重复项。在给定的示例中,numbersList是包含整数的arraylist,其中一些是重复的数字。例如1,3和5.我们将列表添加到LinkedHashSet,然后将内容返回到列表中。

大家好,又见面了,我是你们的朋友全栈君。

1、使用LinkedHashSet删除arraylist中的重复数据

LinkedHashSet是在一个ArrayList删除重复数据的最佳方法。LinkedHashSet在内部完成两件事:

  • 删除重复数据

  • 保持添加到其中的数据的顺序

Java示例使用LinkedHashSet删除arraylist中的重复项。在给定的示例中,numbersList是包含整数的arraylist,其中一些是重复的数字。

例如1,3和5.我们将列表添加到LinkedHashSet,然后将内容返回到列表中。结果arraylist没有重复的整数。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashSet;
 
public class ArrayListExample {
    public static void main(String[] args) { 
        ArrayList<Integer> numbersList = new ArrayList<>(Arrays.asList(1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8)); 
        System.out.println(numbersList); 
        LinkedHashSet<Integer> hashSet = new LinkedHashSet<>(numbersList); 
        ArrayList<Integer> listWithoutDuplicates = new ArrayList<>(hashSet); 
        System.out.println(listWithoutDuplicates); 
    } 
}

输出: 

[1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8]
 
[1, 2, 3, 4, 5, 6, 7, 8]

2、使用java8新特性stream进行List去重

要从arraylist中删除重复项,我们也可以使用java 8 stream api。使用steam的distinct()方法返回一个由不同数据组成的流,通过对象的equals()方法进行比较。

收集所有区域数据List使用Collectors.toList()。

Java程序,用于在不使用Set的情况下从java中的arraylist中删除重复项。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
 
public class ArrayListExample{
    public static void main(String[] args) { 
        ArrayList<Integer> numbersList = new ArrayList<>(Arrays.asList(1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8));
        System.out.println(numbersList);
        List<Integer> listWithoutDuplicates = numbersList.stream().distinct().collect(Collectors.toList()); 
        System.out.println(listWithoutDuplicates); 
    }
}

输出: 

[1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8]
 
[1, 2, 3, 4, 5, 6, 7, 8]

3、利用HashSet不能添加重复数据的特性 由于HashSet不能保证添加顺序,

所以只能作为判断条件保证顺序:

private static void removeDuplicate(List<String> list) {
    HashSet<String> set = new HashSet<String>(list.size());
    List<String> result = new ArrayList<String>(list.size());
    for (String str : list) {
        if (set.add(str)) {
            result.add(str);
        }
    }
    list.clear();
    list.addAll(result);
}

4、利用List的contains方法循环遍历,重新排序,只添加一次数据,避免重复

private static void removeDuplicate(List<String> list) {
    List<String> result = new ArrayList<String>(list.size());
    for (String str : list) {
        if (!result.contains(str)) {
            result.add(str);
        }
    }
    list.clear();
    list.addAll(result);
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141111.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月9日 上午6:20
下一篇 2022年5月9日 上午6:40


相关推荐

  • JavaScript实例教程

    JavaScript实例教程第一个javascript程序javascript放在head部分javascript放在body部分javascript放在head和body部分javascrip

    2022年7月1日
    25
  • Linux下awk命令简介

    Linux下awk命令简介转载自 http www zsythink net archives 1336 初识 awk 我们先来用专业的术语描述一下 awk 是什么 如果你看不懂 没关系 我们会再用 大白话 解释一遍 awk 是一个报告生成器 它拥有强大的文本格式化的能力 这就是专业的说法 你可能不理解所谓的报告生成器中的 报告 是什么 你可以把 报告 理解为 报表 或者 表格 也就是说 我们可以利用 awk 命令

    2026年1月27日
    3
  • Vue项目使用Coze的聊天窗(一)

    Vue项目使用Coze的聊天窗(一)

    2026年3月12日
    2
  • 【JS】JS数组添加元素的三种方法「建议收藏」

    【JS】JS数组添加元素的三种方法「建议收藏」1、push()方法可向数组的末尾添加一个或多个元素,并返回新的长度。  1)、语法:arrayObject.push(newelement1,newelement2,….,newelementX)参数 描述 newelement1 必需。要添加到数组的第一个元素。 newelement2 可选。要添加到数组的第二个元素。 newelement…

    2025年5月27日
    4
  • NFV相关术语解释[通俗易懂]

    NFV相关术语解释[通俗易懂]NFV词汇1)0~9无。2)A~B无。3)==C==(1)CPU(CentralProcessingUnit,中央处理器):一种NFV计算域设备,用以提供主要的容器接口。(2)computedomain(计算域):一种NFVI(笔者注:NFVI即NFVInfrastructure——NFV基础设施)内的域,其中包括各种服务器与存储(设备)。(3)computenod…

    2025年10月14日
    5
  • 十大Java编程工具

    十大Java编程工具以下是大多数Java程序员在日常生活中使用的10种最常见的Java开发工具。如果您正在使用Java技术,您应该已经熟悉这些工具,但如果您不熟悉,那么现在是了解和探索它们的好时机。1.Eclipse、NetBeans或IntelliJIDEAIDE是Java开发人员最重要的工具。IDE不仅为您提供集成开发环境,还有助于导航、调试和记录您的代码。由于Eclipse是行业领导者,因此几乎一半的Java开发人员都使用它。我更进一步,除了使用Eclipse,我喜欢使用Netb

    2022年7月7日
    27

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号