最近项目中需要对list集合中的重复值进行处理,大部分是采用两种方法,一种是用遍历list集合判断后赋给另一个list集合,一种是用赋给set集合再返回给list集合。 
但是赋给set集合后,由于set集合是无序的,原先的顺序就打乱了。所以我又想着能不能用set的特性进行去重又不打乱顺序呢? 
试了一下,也是可以的,几种方法在不同情况下都有各自的优势。现在将代码写出来,比较一下。

当list集合中存储的类型是对象类型的时候,我们就不能简单的只把list集合转换成set集合。

set集合去重,不打乱顺序,当数据不是基本数据时,并不适用

  1.  
    //set集合去重,不打乱顺序
  2.  
    public static void main(String[] args){
  3.  
    List<String> list = new ArrayList<String>();
  4.  
    list.add("aaa");
  5.  
    list.add("bbb");
  6.  
    list.add("aaa");
  7.  
    list.add("aba");
  8.  
    list.add("aaa");
  9.  
     
  10.  
    Set set = new HashSet();
  11.  
    List newList = new ArrayList();
  12.  
    for (String cd:list) {
  13.  
    if(set.add(cd)){
  14.  
    newList.add(cd);
  15.  
    }
  16.  
    }
  17.  
    System.out.println( "去重后的集合: " + newList);
  18.  
    }

遍历后判断赋给另一个list集合

  1.  
    //遍历后判断赋给另一个list集合
  2.  
    public static void main(String[] args){
  3.  
    List<String> list = new ArrayList<String>();
  4.  
    list.add("aaa");
  5.  
    list.add("bbb");
  6.  
    list.add("aaa");
  7.  
    list.add("aba");
  8.  
    list.add("aaa");
  9.  
     
  10.  
    List<String> newList = new ArrayList<String>();
  11.  
    for (String cd:list) {
  12.  
    if(!newList.contains(cd)){
  13.  
    newList.add(cd);
  14.  
    }
  15.  
    }
  16.  
    System.out.println( "去重后的集合: " + newList);
  17.  
    }

set去重(addAll),当数据不是基本数据时,并不适用

  1.  
    //set去重
  2.  
    public static void main(String[] args){
  3.  
    List<String> list = new ArrayList<String>();
  4.  
    list.add("aaa");
  5.  
    list.add("bbb");
  6.  
    list.add("aaa");
  7.  
    list.add("aba");
  8.  
    list.add("aaa");
  9.  
     
  10.  
    Set set = new HashSet();
  11.  
    List newList = new ArrayList();
  12.  
    set.addAll(list);
  13.  
    newList.addAll(set);
  14.  
     
  15.  
    System.out.println( "去重后的集合: " + newList);
  16.  
    }

set去重(缩减为一行)(只是按照自然顺序排列,即字母表顺序排序)

  1.  
    //set去重(缩减为一行)
  2.  
    public static void main(String[] args){
  3.  
    List<String> list = new ArrayList<String>();
  4.  
    list.add("aaa");
  5.  
    list.add("bbb");
  6.  
    list.add("aaa");
  7.  
    list.add("aba");
  8.  
    list.add("aaa");
  9.  
     
  10.  
    List newList = new ArrayList(new HashSet(list));
  11.  
     
  12.  
    System.out.println( "去重后的集合: " + newList);
  13.  
    }

hashset不进行排序,还有一种方法是用 treeset,去重并且按照自然顺序排列,将hashset改为treeset就可以了。(原本的顺序是改变的,只是按照字母表顺序排列而已)

    1.  
      //去重并且按照自然顺序排列
    2.  
      List newList = new ArrayList(new TreeSet(list));

去除List集合中的重复值(四种好用的方法)(基本数据类型可用)的更多相关文章

  1. 去除List集合中的重复值(四种好用的方法)

    最近项目中需要对list集合中的重复值进行处理,大部分是采用两种方法,一种是用遍历list集合判断后赋给另一个list集合,一种是用赋给set集合再返回给list集合. 但是赋给set集合后,由于se ...

  2. Java基础知识强化之集合框架笔记27:ArrayList集合练习之去除ArrayList集合中的重复字符串元素

    1. 去除ArrayList集合中的重复字符串元素(字符串内容相同) 分析: (1)创建集合对象 (2)添加多个字符串元素(包含重复的) (3)创建新的集合 (4)遍历旧集合,获取得到每一个元素 (5 ...

  3. java集合 collection-list-ArrayList 去除ArrayList集合中的重复元素。

    import java.util.*; /* 去除ArrayList集合中的重复元素. */ class ArrayListTest { public static void sop(Object o ...

  4. Java 去除 ArrayList 集合中的重复元素

    // One practice package Collection; import java.util.ArrayList; import java.util.Iterator; // 去除 Arr ...

  5. 去除ArrayList集合中的重复自定义对象元素

    要求去除ArrayList集合中重复的Student的对象(什么叫重复,所有属性值都相同叫做重复). 思路: 1.创建一个新集合 2.遍历旧集合中的每一个元素,去新集合中找这个元素,如果这个元素不存在 ...

  6. Java基础知识强化之集合框架笔记28:ArrayList集合练习之去除ArrayList集合中的重复字符串元素(升级)

    1. 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同)     要求:不能创建新的集合,就在以前的集合上做. 2. 代码示例之 去除集合中重复元素,不创建新的集合: package ...

  7. 集合框架-ArrayList练习(去除ArrayList集合中的重复元素)

    1 package cn.itcast.p3.arraylist.test; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; ...

  8. 去除List集合中的重复对象,Map遍历代码

    /*** * 去除List<PartsInfoDTO>列表中的重复对象 ~!! * @param list * @return */ public static List<Parts ...

  9. 如何去除List集合中的重复元素?

    一.问题由来 在实际开发的时候,我们经常会碰到这么一个问题:一个集合容器里面有很多重复的对象,里面的对象没有主键,或者说忽略主键,根据业务的需求,我们需要根据条件筛选出没有重复的对象. 二.去重操作 ...

随机推荐

  1. Sublime Text3 注册码(Windows/Build 3176版本)| 开发工具

    转自:dushusir.com 1.修改hosts文件(路径:C:\Windows\System32\drivers\etc): 0.0.0.0 www.sublimetext.com 0.0.0.0 ...

  2. Java实现 LeetCode 395 至少有K个重复字符的最长子串

    395. 至少有K个重复字符的最长子串 找到给定字符串(由小写字符组成)中的最长子串 T , 要求 T 中的每一字符出现次数都不少于 k .输出 T 的长度. 示例 1: 输入: s = " ...

  3. Java实现 LeetCode 338 比特位计数

    338. 比特位计数 给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 示例 1: 输入: 2 输出: [0,1,1 ...

  4. Java实现 LeetCode 238 除自身以外数组的乘积

    238. 除自身以外数组的乘积 给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元 ...

  5. Java实现 蓝桥杯VIP 算法提高 淘淘的名单

    算法提高 淘淘的名单 时间限制:100ms 内存限制:8.0MB 问题描述 by ZBY- ? 淘淘拿到了一份名单,他想对上面的名字进行处理,挑出一些特殊的名字,他请你来帮忙. 淘淘关注以下名字: 如 ...

  6. Java实现指定年份月份的日历表

    输入指定的年份与月份,看这个月的日历表 package Xueying_Liu; import java.util.Scanner; public class rilibiao { public st ...

  7. Linux目录结构与功能

    在Linux中,一切皆文件.所以,Linux和Windows目录有很大的不同,它没有明确的盘符,它的目录就像一棵大树一样,顶层目录就是根目录:/ ,然后下面又有很多个分支,分支可以再分,从而形成一个庞 ...

  8. Tidyverse| XX_join :多个数据表(文件)之间的各种连接

    本文首发于公众号:“生信补给站” Tidyverse| XX_join :多个数据表(文件)之间的各种连接 前面分享了单个文件中的select列,filter行,列拆分等,实际中经常是多个数据表,综合 ...

  9. linux下的mysql目录

    /usr/bin 客户端程序和脚本[root@~ bin]# ls mysql*mysql mysqldump mysql_secure_installationmysqladmin mysqldum ...

  10. 超强教程!在树莓派上构建多节点K8S集群!

    在很长一段时间里,我对于在树莓派上搭建Kubernetes集群极为感兴趣.在网络上找到一些教程并且跟着实操,我已经能够将Kubernetes安装在树莓派上,并在三个Pi集群中工作.然而,在master ...