最近项目中需要对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. vim的常见操作

    vim常见操作 复制 yank, y yy:复制整行 nyy/yny y^/y0:复制当前行到行头的内容 y$:复制当前到行尾的内容 yw:复制一个word nyw/ynw 复制n个word yG:复 ...

  2. 【大厂面试03期】MySQL是怎么解决幻读问题的?

    问题分析 首先幻读是什么? 根据MySQL文档上面的定义 The so-called phantom problem occurs within a transaction when the same ...

  3. Java实现 蓝桥杯VIP 算法训练 薪水计算

    算法训练 薪水计算 时间限制:1.0s 内存限制:512.0MB 提交此题 问题描述 编写一个程序,计算员工的周薪.薪水的计算是以小时为单位,如果在一周的时间内,员工工作的时间不超过40 个小时,那么 ...

  4. Java实现 蓝桥杯VIP 算法训练 成绩的等级输出

    输入一个百分制的成绩t后,按下式输出它的等级.等级为:90100为A,8089为B,7079为C,6069为D,0~59为E. 样例输入 98 样例输出 A import java.util.Scan ...

  5. Java实现 蓝桥杯VIP 算法训练 矩阵加法

    时间限制:1.0s 内存限制:512.0MB 问题描述 给定两个N×M的矩阵,计算其和.其中: N和M大于等于1且小于等于100,矩阵元素的绝对值不超过1000. 输入格式 输入数据的第一行包含两个整 ...

  6. Java实现 LeetCode 287 寻找重复数

    287. 寻找重复数 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数.假设只有一个重复的整数,找出这个重复的数. 示例 ...

  7. Java实现WUST 1002: 哈夫曼树

    [问题描述] 根据给定的若干权值可以构造出一颗哈夫曼树.构造的哈夫曼树可能不唯一,但是按照下面的选取原则所构造出来的哈夫曼树应该是唯一的. (1)每次选取优先级最低的两个结点,优先级最低的作为左子树, ...

  8. Java实现 LeetCode 171 Excel表列序号

    171. Excel表列序号 给定一个Excel表格中的列名称,返回其相应的列序号. 例如, A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> ...

  9. Java实现 蓝桥杯 算法训练 数据交换

    试题 算法训练 数据交换 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 编写一个程序,输入两个整数,分别存放在变量x和y当中,然后使用自己定义的函数swap来交换这两个变量的值. ...

  10. Java实现交替字符串

    1 问题描述 输入三个字符串s1.s2和s3,判断第三个字符串s3是否由前两个字符串s1和s2交错而成且不改变s1和s2中各个字符原有的相对顺序. 2 解决方案 此处采用动态规划法,可以较大的提高时间 ...