最近项目中需要对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. 高性能可扩展mysql 笔记(三)Hash分区、RANGE分区、LIST分区

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.MySQL分区表操作 1.定义:数据库表分区是数据库基本设计规范之一,分区表在物理上表现为多个文件, ...

  2. Java实现蓝桥杯十六进制转八进制

    基础练习 十六进制转八进制 时间限制:1.0s 内存限制:512.0MB 提交此题 锦囊1 锦囊2 问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n ( ...

  3. Java实现 蓝桥杯VIP 算法训练 数对

    算法训练 数对 时间限制:1.0s 内存限制:512.0MB 问题描述 编写一个程序,该程序从用户读入一个整数,然后列出所有的数对,每个数对的乘积即为该数. 输入格式:输入只有一行,即一个整数. 输出 ...

  4. Java实现 LeetCode 112 路径总和

    112. 路径总和 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标 ...

  5. PAT 在霍格沃茨找零钱

    如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易.”现在,给定 ...

  6. 曹工说JDK源码(1)--ConcurrentHashMap,扩容前大家同在一个哈希桶,为啥扩容后,你去新数组的高位,我只能去低位?

    如何计算,一对key/value应该放在哪个哈希桶 大家都知道,hashmap底层是数组+链表(不讨论红黑树的情况),其中,这个数组,我们一般叫做哈希桶,大家如果去看jdk的源码,会发现里面有一些变量 ...

  7. Flutter 中 GestureDetector 的使用误区

    在实际开发中,我们通常需要实现某个组件的更多点击事件.比如:原生的RaisedButton组件是无法响应诸如拖拽或是按下.抬起等细化的动作,它只有一个onPressed()方法来表示.当我们想实现这些 ...

  8. v-on 缩写

    <!-- 完整语法 --> <a v-on:click="doSomething"></a> <!-- 缩写 --> <a @ ...

  9. Spring:扫描组件

    <context:component-scan>:扫描组件,对设置的包下面的类进行扫描,会讲加上注解的类作为Spring的组件进行加载 组件:指Spring中管理的bean ​ 作为Spr ...

  10. fiddler修改请求参数

    1.打开fiddler ,点击界面左侧左侧底部 2.此图标为before request请求(修改请求参数时,设置这个,可以修改请求参数) 3..再次点击该按钮,将图标切换到下图after respo ...