最近项目中需要对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. Java实现 蓝桥杯 算法提高 转圈游戏(暴力快速幂)

    试题 算法提高 转圈游戏 问题描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在 ...

  2. Java实现 LeetCode 617 合并二叉树(遍历树)

    617. 合并二叉树 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点 ...

  3. Java实现 蓝桥杯VIP 基础练习 芯片测试

    问题描述 有n(2≤n≤20)块芯片,有好有坏,已知好芯片比坏芯片多. 每个芯片都能用来测试其他芯片.用好芯片测试其他芯片时,能正确给出被测试芯片是好还是坏.而用坏芯片测试其他芯片时,会随机给出好或是 ...

  4. Java实现 LeetCode 56 合并区间

    56. 合并区间 给出一个区间的集合,请合并所有重叠的区间. 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: ...

  5. 数据结构:用实例分析ArrayList与LinkedList的读写性能

    目录 背景 ArrayList LinkedList 实例分析 1.增加数据 2.插入数据 3.遍历数据 3.1.LinkedList遍历改进 总结 背景 ArrayList与LinkedList是J ...

  6. Linux网络命令详解

    命令write,功能是给指定用户发信息(接收信息的用户要处于登录状态,相当于QQ的私聊),例如:用户xbb给用户liuyifei发消息:I want to eat together!(发送消息以CRT ...

  7. c#发布补丁

    日常开发维护项目中,可能会遇到发布后出现bug,或者忘记改配置文件等等问题,这个时候,可能就需要重新进行下发布,有的开发小伙伴可能会把编译后的代码文件整个替换.这样做虽然也可以实现发布,但是有几个弊端 ...

  8. Scrapy 小技巧(一):使用 scrapy 自带的函数(follow & follow_all)优雅的生成下一个请求

    前言 如何优雅的获取同一个网站上下一次爬取的链接并放到生成一个 Scrapy Response 呢? 样例 from urllib import parse import scrapy class S ...

  9. harbor私有仓库安装

    准备环境 centos7.4 docker-ce 19.03.8 docker-compose version 1.18.0 harbor 版本: 1.7.5   一.安装dokcer # 安装依赖包 ...

  10. java 中有几种类型的流?

    字节流,字符流. 字节流继承于 InputStream \ OutputStream, 字符流继承于 InputStreamReader \ OutputStreamWriter. 在 java.io ...