最近项目中需要对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. InnoSetup汉化版打包工具下载-附带脚本模板

    InnoSetup汉化版打包工具下载地址: https://www.90pan.com/b1907264 脚本模板 ; 脚本用 Inno Setup 脚本向导 生成.; 查阅文档获取创建 INNO S ...

  2. js匿名函数和date对象,math对象

    匿名函数: <script type="text/javascript"> function (参数列表){ 要执行的语句块; } </script> 对象 ...

  3. (Java实现) 洛谷 P1051 谁拿了最多奖学金

    题目描述 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上 ...

  4. Java实现 蓝桥杯VIP 算法训练 快速排序

    import java.util.Scanner; public class 快速排序 { public static void main(String[] args){ Scanner sc=new ...

  5. Java实现 LeetCode 2 两数相加

    两数相加 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...

  6. Java实现台阶问题

    1 问题描述 一个台阶总共有n级,如果一次可以跳1级,也可以跳2级,求总共有多少种跳法. 2 解决方案 2.1 递归法 如果整个台阶只有1级,则显然只有一种跳法.如果台阶有2级,则有两种跳法:一种是分 ...

  7. Python 图像处理 OpenCV (6):图像的阈值处理

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

  8. Windows内核驱动开发:HelloWorld

    测试信息 Dev Machine: Windows Version: 2004 (19041.264) WDK Version: 10.0.19041.1 SDK Version: 10.0.1904 ...

  9. Memory layout

    Text Segment       Text Segment,通常也被称为代码段. 为了防止 heap 或是 stack 的溢出,text 段常被安排在 heap 或是 stack 之后. Text ...

  10. DML_Data Modification_DELETE

    DML_Data Modification_Delete删除记录比较简单,但是需要特别注意,一不小心,就变成了 “从删库到跑路“ 就掉的大了 /* Microsoft SQL Server 2008 ...