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

简介: 最近项目中需要对list集合中的重复值进行处理,大部分是采用两种方法,一种是用遍历list集合判断后赋给另一个list集合,一种是用赋给set集合再返回给list集合。 但是赋给set集合后,由于set集合是无序的,原先的顺序就打乱了。

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

为降低成本,您可以用阿里云代金券,阿里云1000元代金券免费领取地址 https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=2a7uv47d

//set集合去重,不打乱顺序

public static void main(String[] args){
     List<String> list  =   new  ArrayList<String>(); 
     list.add("aaa");
     list.add("bbb");
     list.add("aaa");
     list.add("aba");
     list.add("aaa");

Set set = new HashSet();

     List newList = new  ArrayList(); 
     for (String cd:list) {
        if(set.add(cd)){
            newList.add(cd);
        }
    }
     System.out.println( "去重后的集合: " + newList); 
  }

 //遍历后判断赋给另一个list集合
 public static void main(String[] args){
     List<String> list  =   new  ArrayList<String>(); 
     list.add("aaa");
     list.add("bbb");
     list.add("aaa");
     list.add("aba");
     list.add("aaa");

     List<String> newList = new  ArrayList<String>(); 
     for (String cd:list) {
        if(!newList.contains(cd)){
            newList.add(cd);
        }
    }
     System.out.println( "去重后的集合: " + newList); 
  }

//set去重
public static void main(String[] args){
     List<String> list  =   new  ArrayList<String>(); 
     list.add("aaa");
     list.add("bbb");
     list.add("aaa");
     list.add("aba");
     list.add("aaa");

    Set set = new  HashSet(); 
     List newList = new  ArrayList(); 
     set.addAll(list);
     newList.addAll(set);

     System.out.println( "去重后的集合: " + newList); 
 }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

    //set去重(缩减为一行)
    public static void main(String[] args){
         List<String> list  =   new  ArrayList<String>(); 
         list.add("aaa");
         list.add("bbb");
         list.add("aaa");
         list.add("aba");
         list.add("aaa");

         List newList = new ArrayList(new HashSet(list)); 

         System.out.println( "去重后的集合: " + newList); 
     }

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

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

相关文章
|
存储 安全 Java
【Java集合类面试二十五】、有哪些线程安全的List?
线程安全的List包括Vector、Collections.SynchronizedList和CopyOnWriteArrayList,其中CopyOnWriteArrayList通过复制底层数组实现写操作,提供了最优的线程安全性能。
|
安全
List集合特有功能
List集合特有功能
112 2
【Java集合类面试二十三】、List和Set有什么区别?
List和Set的主要区别在于List是一个有序且允许元素重复的集合,而Set是一个无序且元素不重复的集合。
|
9月前
|
Java 机器人 程序员
从入门到精通:五种 List 遍历方法对比与实战指南
小米是一位热爱分享技术的程序员,本文详细介绍了 Java 中遍历 List 的五种方式:经典 for 循环、增强 for 循环、Iterator 和 ListIterator、Stream API 以及 forEach 方法。每种方式都有其适用场景和优缺点,例如 for 循环适合频繁访问索引,增强 for 循环和 forEach 方法代码简洁,Stream API 适合大数据量操作,ListIterator 支持双向遍历。文章通过生动的小故事和代码示例,帮助读者更好地理解和选择合适的遍历方式。
366 2
|
11月前
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
193 5
|
11月前
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
91 3
|
10月前
|
NoSQL Java Redis
List集合按照由小到大排序或者由大到小排序
List集合按照由小到大排序或者由大到小排序
177 0
|
XML Java API
List与String相互转化方法汇总
本文汇总了List与String相互转化的多种方法,包括使用`String.join()`、`StringBuilder`、Java 8的Stream API、Apache Commons Lang3的`StringUtils.join()`以及Guava的`Joiner.on()`方法实现List转String;同时介绍了使用`split()`方法、正则表达式、Apache Commons Lang3的`StringUtils.split()`及Guava的`Splitter.on()`方法实现String转List。
1171 1
List与String相互转化方法汇总
|
12月前
|
NoSQL Java Redis
List集合按照由小到大排序或者由大到小排序
List集合按照由小到大排序或者由大到小排序
96 3
|
Java
用JAVA架建List集合为树形结构的代码方法
这段代码定义了一个表示树形结构的 `Node` 类和一个用于构建树形结构的 `TreeController`。`Node` 类包含基本属性如 `id`、`pid`、`name` 和 `type`,以及子节点列表 `children`。`TreeController` 包含初始化节点列表并将其转换为树形结构的方法。通过过滤和分组操作实现树形结构的构建。详情可见:[代码示例链接1](http://www.zidongmutanji.com/zsjx/43551.html),[代码效果参考链接2](https://www.257342.com/sitemap/post.html)。
180 5