首页 > 其他分享 >List 去重的 6 种方法

List 去重的 6 种方法

时间:2023-09-19 15:13:25浏览次数:40  
标签:list void List add 集合 方法 public

一、HashSet去重

我们知道 HashSet 天生具备“去重”的特性,那我们只需要将 List 集合转换成 HashSet 集合就可以了,实现代码如下:

点击查看代码
public class ListDistinctExample {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>() {{
            add(1);add(3);add(5);add(2);add(1);
            add(3);add(7);add(2);
        }};
        System.out.println("原集合:" + list);
        method_2(list);
    }

    /**
     * 使用 HashSet 去重
     * @param list
     */
    public static void method_2(List<Integer> list) {
        HashSet<Integer> set = new HashSet<>(list);
        System.out.println("去重集合:" + set);
    }
}

以上程序执行的结果:
image

二、TreeSet去重

除了HashSet集合之外,我们还可以使用 TreeSet 集合来实现去重功能,实现代码如下:

点击查看代码
public class ListDistinctExample {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>() {{
            add(1);add(3);add(5);add(2);add(1);
            add(3);add(7);add(2);
        }};
        System.out.println("原集合:" + list);
        method_4(list);
    }

    /**
     * 使用 TreeSet 去重(无序)
     * @param list
     */
    public static void method_4(List<Integer> list) {
        TreeSet<Integer> set = new TreeSet<>(list);
        System.out.println("去重集合:" + set);
    }
}

以上程序执行的结果:

image

三、LinkedHashSet去重

如果上面的Set 不能满足需求,那就使用 LinkedHashSet,它既能去重又能保证集合的顺序,实现代码如下:

点击查看代码
public class ListDistinctExample {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>() {{
            add(1);add(3);add(5);add(2);add(1);
            add(3);add(7);add(2);
        }};
        System.out.println("原集合:" + list);
        method_3(list);
    }

    /**
     * 使用 LinkedHashSet 去重
     * @param list
     */
    public static void method_3(List<Integer> list) {
        LinkedHashSet<Integer> set = new LinkedHashSet<>(list);
        System.out.println("去重集合:" + set);
    }
}

以上程序执行的结果:

image

四、迭代器去重

使用迭代器循环判断每一项数据,如果当前循环的数据,在集合中存在两份或两份以上,就将当前的元素删除掉,这样循环完之后,即可得到一个没有重复数据的集合

点击查看代码
public class ListDistinctExample {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>() {{
            add(1);add(3);add(5);add(2);add(1);
            add(3);add(7);add(2);
        }};
        System.out.println("原集合:" + list);
        method_1(list);
    }

    /**
     * 使用迭代器去重
     * @param list
     */
    public static void method_1(List<Integer> list) {
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()) {
            // 获取循环的值
            Integer item = iterator.next();
            // 如果存在两个相同的值
            if (list.indexOf(item) != list.lastIndexOf(item)) {
                // 移除最后那个相同的值
                iterator.remove();
            }
        }
        System.out.println("去重集合:" + list);
    }
}

以上程序执行的结果:

image

五、Stream去重

JDK 8 为我们带来了一个非常实用的方法 Stream,使用它可以实现很多功能。(个人感觉Stream很好用

标签:list,void,List,add,集合,方法,public
From: https://www.cnblogs.com/lcaiqin/p/17714679.html

相关文章

  • 使用Java去除html标签的几种方法
    用Java解析html,删除所有的HTML标签,只保留纯文字内容,有以下几种方法:1.使用正则表达式html内容从程序角度来讲,就是一个字符串,我们可以对其按照纯文本处理的方式来处理。我们在做文本处理的时候,第一个想到的就是正则表达式。从一个字符串中删除HTML,对于正则来说,还是比较简单的......
  • 软件可靠性评估方法
    软件可靠性评估是指通过一系列的测试、分析和评估方法来确定软件系统在特定条件下能够稳定运行的程度。软件可靠性评估的目标是识别和量化软件系统可能存在的缺陷、错误或故障,并为其提供可靠性和稳定性方面的性能指标。这有助于确保软件在不同操作环境和使用情况下都能够表现良好,减......
  • dom4j操作Element节点方法
    1.获取文档的根节点ElementrootElm=document.getRootElement();2.取得某节点的单一子节点ElementmemberElm=root.element("tagName");3.取得节点的文字Stringtext=root.elementText("name");4.取得某节点下名为"member"的所有字节点并进行遍历Listnodes=rootEl......
  • Java8中遍历Map、Map转List、List转Map
    1.遍历MapMap<Integer,String>map=newHashMap<>();map.put(1,"a");map.put(2,"b");map.put(3,"c");//Map.keySet遍历for(Integerk:map.keySet()){ System.out.println(k+"==>"+map.get(k));......
  • listview排序
    intWINAPICustomSortProc(LPARAMItem1,LPARAMItem2,LPARAMParamSort){staticboolb=true;if(b){b=false;return-CompareText(((TListItem*)Item1)->Caption,((TListItem*)Item2)->Caption);}......
  • 时间序列的重采样和pandas的resample方法介绍
    重采样是时间序列分析中处理时序数据的一项基本技术。它是关于将时间序列数据从一个频率转换到另一个频率,它可以更改数据的时间间隔,通过上采样增加粒度,或通过下采样减少粒度。在本文中,我们将深入研究Pandas中重新采样的关键问题。为什么重采样很重要?时间序列数据到达时通常带有......
  • 方法重载
    定义:同一个类里,多个方法具有相同名称,但参数列表不同。重点:在同一个类里具有相同的名称参数列表不同返回值不同不算方法重载原因:JVM调用方法是通过方法签名判断的。而方法签名=方法名+参数类型+参数个数。返回值不是方法签名的一部分。......
  • 前端处理 File 的基础方法
    在前端开发过程中,处理File对象的场景还是蛮多的,熟练掌握对File对象的处理方法,可以极大提高前端工作的幸福度。JavaScript处理File对象的主要方式是通过HTML5的FileAPI。FileAPI提供了一组用于处理本地文件的API,包括创建、读取、写入和删除文件等操作。下面是一些常......
  • AI绘画变现渠道:日入100+,推荐一个本人实操的方法
    关于AI绘画变现,之前写了几篇相关的文章,需要的自己查阅:AI绘画:如何让图片开口说话生成视频?变现渠道有哪些?无私分享我的AI绘画变现之路,普通人可实操可模仿AI壁纸号一周增加上千粉丝,轻松变现的成功案例分享今天给大家推荐一篇之前没有介绍过的变现方式。前段时间偷偷上线了一个产......
  • 关于`dial unix /var/run/docker.sock: connect: permission denied`的处理方法笔记
    之前遇到的一个问题,使用非root用户时操作docker提示无权限,在查阅了一些文章之后自己又摸索出了一些更方便的方法,顺手记录下来。一、问题发现根据报错信息dialunix/var/run/docker.sock:connect:permissiondenied,可以看出,是因为当前用户对docker使用的unixdomainsocket......