【Java】List集合去重的方式

这篇具有很好参考价值的文章主要介绍了【Java】List集合去重的方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

方式一:利用TreeSet集合特性排序+去重(有序)

TreeSet可以将字符串类型的数据按照字典顺序进行排序,首字母相同则看第二位

 public static void main(String[] args) {
        // 一.利用TreeSet集合特性排序+去重

        List<String> list=new LinkedList<>();
        list.add("22");
        list.add("11");
        list.add("33");
        list.add("66");
        list.add("22");
        list.forEach(item->{
            System.out.println("去重前的集合:"+item);
        });
        System.out.println("-----------------");


        List<String> result=new LinkedList<>(new TreeSet<>(list));
        System.out.println("去重后的集合:"+result);
    }

去重前的集合元素:22
去重前的集合元素:11
去重前的集合元素:33
去重前的集合元素:66
去重前的集合元素:22


去重后的集合:[11, 22, 33, 66]

方式二:利用HashSet的特性去重(无序)

由于Set的特性是无序且不可重复,我们利用这个特性进行两步操作:

  1. 把list放入set中
  2. 把set还回list里
public static void main(String[] args) {
        // 利用set的特性去重

        List<String> list=new LinkedList<>();
        list.add("22");
        list.add("11");
        list.add("33");
        list.add("66");
        list.add("22");
        Iterator iter=list.iterator();
        while(iter.hasNext()){
            System.out.println("去重前的集合元素:"+iter.next());
        }
        System.out.println("-----------------");


        // result集合存放最终的结果
        List<String> result=new LinkedList<>();

        if (list.size()>0&&list!=null){
            // 新建HashSet集合,将list放入
            Set<String> set=new HashSet<>();
            set.addAll(list);

            // 将去重后的set集合放入结果集合result中
            result.addAll(set);
        }
        System.out.println("去重后的集合:"+result);
    }

去重前的集合元素:22
去重前的集合元素:11
去重前的集合元素:33
去重前的集合元素:66
去重前的集合元素:22


去重后的集合:[22, 11, 33, 66]

方式三:利用LinkedHashSet去重(有序)

LinkedHashSet虽然可以去重,但是根据它的特性,它不能对数据进行排序,只能维持原来插入时的秩序

  public static void main(String[] args) {
        // 利用LinkedHashSet集合去重

        List<String> list=new LinkedList<>();
        list.add("22");
        list.add("11");
        list.add("33");
        list.add("66");
        list.add("22");
        for (int i=0;i<list.size();i++){
            System.out.println("去重前的集合元素:"+list.get(i));
        }
        System.out.println("-----------------");


        List<String> result=new LinkedList<>(new LinkedHashSet<String>(list));
        System.out.println("去重后的集合:"+result);
    }

去重前的集合元素:22
去重前的集合元素:11
去重前的集合元素:33
去重前的集合元素:66
去重前的集合元素:22


去重后的集合:[22, 11, 33, 66]

方式四:迭代器去重(无序)

此方法得到的新集合是无序的,也就是新集合的排列顺序和原集合不一致

public static void main(String[] args) {
        // 二.迭代器去重(无序)

        List<String> list=new LinkedList<>();
        list.add("22");
        list.add("11");
        list.add("33");
        list.add("66");
        list.add("22");
        for (String item:list){
            System.out.println("去重前的集合元素:"+item);
        }
        System.out.println("-----------------");


        Iterator<String> iterator=list.iterator();
        while (iterator.hasNext()){
            String next= iterator.next();
            // 如果存在两个相同的值
            if (list.indexOf(next)!=list.lastIndexOf(next)){
                //移除最后那个相同的值
                iterator.remove();
            }
        }
        System.out.println("去重后的集合:"+list);
    }

去重前的集合元素:22
去重前的集合元素:11
去重前的集合元素:33
去重前的集合元素:66
去重前的集合元素:22


去重后的集合:[11, 33, 66, 22]

方式五:使用list.contains()对全部元素进行判断(有序)

  • String类型会判断字符串里是否有相同的部分
  • List里则会判断是否有相同的元素
  • 我们可以用list.contains()的方法进行判断,然后将其添加到新的list当中,元素的顺序不发生改变
 public static void main(String[] args) {
        // 使用list.contains()对全部元素进行判断


        System.out.println("----------");
        System.out.println("探究contains()方法");
        String s1="aaa";
        String s2="aa";
        System.out.println(s1.contains(s2));

        List<String> list0=new LinkedList<>();
        list0.add("aaa");
        System.out.println(list0.contains("aa"));
        System.out.println("----------");



        List<String> list=new LinkedList<>();
        list.add("22");
        list.add("11");
        list.add("33");
        list.add("66");
        list.add("22");
        System.out.println("去重前的集合:"+list);
        System.out.println("-----------------");


        List<String> result=new LinkedList<>();
        for (String str:list){
            if (!result.contains(str)){
                result.add(str);
            }
        }
        System.out.println("去重后的集合:"+result);
    }

探究contains()方法
true
false


去重前的集合:[22, 11, 33, 66, 22]
去重后的集合:[22, 11, 33, 66]

方式六:使用Java8特性(Stream去重)去重(有序)

把list集合->Stream流,然后对流用distinct()去重,再用collect()收集

public static void main(String[] args) {
        // 使用Java8特性去重

        List<String> list=new LinkedList<>();
        list.add("22");
        list.add("11");
        list.add("33");
        list.add("66");
        list.add("22");
        System.out.println("去重前的集合:"+list);
        System.out.println("-----------------");


        List<String> result=new LinkedList<>();
        result=list.stream().distinct().collect(Collectors.toList());
        System.out.println("去重后的集合:"+result);
    }

去重前的集合:[22, 11, 33, 66, 22]


去重后的结集合:[22, 11, 33, 66]

方式七:使用list自身方法remove()–>不推荐

  • 如果你的list里存的比较复杂,是一个List<Map<String,Object>>格式的情况,最无奈之举就是这种方法
  • 主要操作是将同一个list用两层for循环配合.equals()方法,有相同的就用remove()方法剔除掉,然后得到一个没有重复数据的list
  public static List<Map<String,Object>> distinct(List<Map<String,Object>> list){
        if (list!=null && list.size()>0){
            for (int i=0;i<list.size();i++){
                for (int j=list.size()-1;j>i;j--){
                    // 这里是对象的比较,如果去重条件不一样,修改这里即可
                    if (list.get(j).equals(list.get(i))){
                        list.remove(j);
                    }
                }
            }
        }
        return list;
    }

总结:

介绍集合去重的方法中实现最简洁,且去重之后的顺序能和原集合保持一致的实现方法,只有两种:LinkedHashSet 去重和 Stream 去重,其中后一种去重方法无需借助新集合,是我们优先考虑的去重方法文章来源地址https://www.toymoban.com/news/detail-766540.html

到了这里,关于【Java】List集合去重的方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java 1.8 List集合排序、去重、分组、过滤、合并、截取操作

    1、正序 2、逆序 3、根据某个属性或多个属性排序 多个属性排序:需要添加排序条件就在后面添加.thenComparing(UserVO::getxxx),它是在上一个条件的基础上进行排序 1、去重 2、根据某个属性去重(它将该字段还进行排序了) 3、根据某个属性去重(这个方法没有排序) 4、对多个

    2024年02月01日
    浏览(71)
  • JAVA8 获取list集合中重复的元素和获取去重数据

    1.java8获取list集合中重复的元素 2.java8根据List对象属性获取重复数据和获取去重后数据 2.1获取重复数据 结果: 根据多个属性获取重复数据,还在摸索中,欢迎大家来指点!!!!! 2.2获取去重后数据 结果:

    2024年02月12日
    浏览(55)
  • Java List集合去重、过滤、分组、获取数据、求最值、合并、排序、跳数据和遍历

    请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i、 使用stream().map()提取List对象的某一列值及去重 使用 findAny() 和 findFirst() 获取第一条数据 我是南国以南i记录点滴每天成长一点点,学习是永无止境的!转载请附原文链接!!! 参考链接、参考链接

    2024年04月11日
    浏览(70)
  • List去重的5种方案

    假设有以下数据: 1.for 循环添加去重 这个是最基本的实现了,创建一个空的 List,添加前判断一下存在不存在,不存在才添加,这样就保证了元素不重复。 2.for 双循环去重 利用双循环,判断是否有相等的,再进行移除。 3.for 循环重复坐标去重 复制一个 list2,再循环 List2,

    2024年02月04日
    浏览(48)
  • List去重的几种方法

    现在设有Integer类型的ArrayList,list=[0,1,1,3,3,4,5] 1.使用contains 2.使用TreeSet/HashSet/LinkedHashSet 3.Stream流 4.使用迭代器Iterator 5.list中的remove方法

    2024年02月05日
    浏览(60)
  • List 去重的 6 种方法,这个方法最完美!

    在日常的业务开发中,偶尔会遇到需要将 List 集合中的重复数据去除掉的场景。这个时候可能有同学会问:为什么不直接使用 Set 或者 LinkedHashSet 呢?这样不就没有重复数据的问题了嘛? ​ 不得不说,能提这个问题的同学很机智,一眼就看到了问题的本质。 ​ 但是,在实际

    2024年02月03日
    浏览(54)
  • 使用java8 新特性stream流对List<Map<String, Object>>集合进行遍历、过滤、查询、去重、排序、分组

    对于一个ListMapString, Object类型的数据,可以使用Java 8的新特性stream流来进行遍历、过滤、查询、去重、排序、分组等操作。 遍历: 过滤: 查询: 去重: 排序: 分组:

    2024年02月10日
    浏览(69)
  • java stream去重的几种方式

    这个方法会根据元素的 hashCode() 和 equals() 方法来判断是否重复。如果是自定义的类,需要重写这两个方法。 示例: 这个方法可以根据元素的某个属性或者多个属性来去重,比如 name 或者 name+address。这个方法会使用 TreeSet 来排序元素,所以不能保持原来的顺序。 示例: 这个方

    2024年02月13日
    浏览(68)
  • Java List集合取交集的八种不同实现方式

    码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! 在Java中,取两个List集合的交集可以通过多种方式实现,包括使用Java 8的Stream API、传统的for循环遍历、使用集合的retainAll方法,以及使用Apache Commons Collections库等。 方法一:使用Jav

    2024年04月12日
    浏览(36)
  • Java02-迭代器,数据结构,List,Set ,TreeSet集合,Collections工具类

    目录 什么是遍历? 一、Collection集合的遍历方式 1.迭代器遍历 方法 流程 案例 2. foreach(增强for循环)遍历 案例 3.Lamdba表达式遍历 案例 二、数据结构 数据结构介绍 常见数据结构 栈(Stack) 队列(Queue) 链表(Link) 散列表(Hash Table) 树(Tree) List接口 ArraysList集合 Linked

    2024年02月14日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包