面试官:怎么去除 List 中的重复元素?我一行代码搞定,赶紧拿去用!()

  本篇文章为你整理了面试官:怎么去除 List 中的重复元素?我一行代码搞定,赶紧拿去用!()的详细内容,包含有 面试官:怎么去除 List 中的重复元素?我一行代码搞定,赶紧拿去用!,希望能帮助你了解 面试官:怎么去除 List 中的重复元素?我一行代码搞定,赶紧拿去用!。

  分享Java技术,高并发编程,分布式技术,架构设计,Java面试题,算法,行业动态,程序人生等。

  
上次栈长给大家分享了《带了一个 3 年的开发,不会循环删除 List 中的元素,我简直崩溃!!》,上次也给大家留了个小话题:

  怎么去除 List String 中的重复元素呢?

  虽然两个话题差不多,但实现起来就大相径庭了,废话少说,来看看都有哪些实现方式,这仅是我个人的实现方案,不一定全,也不一定是最优的,欢迎大家拍砖。

  List 去重方案

  假设有以下数据:

  

/**

 

   * 3 个张三,2 个李强

  public List String initList = Arrays.asList(

   "张三",

   "李四",

   "张三",

   "周一",

   "刘四",

   "李强",

   "李白",

   "张三",

   "李强",

   "王五"

  

 

  本文所有完整示例源代码已经上传:

  https://github.com/javastacks/javastack

  欢迎 Star 学习,后面 Java 示例都会在这上面提供!

  1、for 循环添加去重

  

/**

 

   * for 循环添加去重

   * @author: 栈长

   * @from: 公众号Java技术栈

  @Test

  public void remove1() {

   List String list = new ArrayList(initList);

   List String list2 = new ArrayList ();

   for (String element : list) {

   if (!list2.contains(element)) {

   list2.add(element);

   System.out.println(list2);

  

 

  这个是最基本的实现了,创建一个空的 List,添加前判断一下存在不存在,不存在才添加,这样就保证了元素不重复。

  输出结果:

  [张三, 李四, 周一, 刘四, 李强, 李白, 王五]

  2、for 双循环去重

  

/**

 

   * for 双循环去重

   * @author: 栈长

   * @from: 公众号Java技术栈

  @Test

  public void remove2() {

   List String list = new ArrayList(initList);

   for (int i = 0; i list.size() - 1; i++) {

   for (int j = list.size() - 1; j j--) {

   if (list.get(j).equals(list.get(i))) {

   list.remove(j);

   System.out.println(list);

  

 

  利用双循环,判断是否有相等的,再进行移除。

  输出结果:

  [张三, 李四, 周一, 刘四, 李强, 李白, 王五]

  3、for 循环重复坐标去重

  

/**

 

   * for 循环重复坐标去重

   * @author: 栈长

   * @from: 公众号Java技术栈

  @Test

  public void remove3() {

   List String list = new ArrayList(initList);

   List String list2 = new ArrayList(initList);

   for (String element : list2) {

   if (list.indexOf(element) != list.lastIndexOf(element)) {

   list.remove(list.lastIndexOf(element));

   System.out.println(list);

  

 

  这种方式很新颖吧?

  复制一个 list2,再循环 List2,判断 list 中的元素的首尾出现的坐标位置是否一致,如果一致,则说明没有重复的,否则重复,再删除重复的位置的元素。

  输出结果:

  [张三, 李四, 周一, 刘四, 李强, 李白, 王五]

  4、Set 去重

  

/**

 

   * Set 去重

   * @author: 栈长

   * @from: 公众号Java技术栈

  @Test

  public void remove4() {

   List String list = new ArrayList(initList);

   List String list2 = new ArrayList(new HashSet(list));

   System.out.println(list2);

  

 

  这招也太简单了吧,一行代码搞定!

  我们知道 Set 是不包含重复元素的,把 List 先装进 HashSet,然后再装回来,这样就保证了元素的不重复。

  输出结果:

  [李强, 李四, 张三, 周一, 李白, 王五, 刘四]

  结果虽然正确,但元素顺序和原始 List 不一致,如果要保证顺序性,可以把 HashSet 换成 LinkedHashSet:

  

/**

 

   * Set 去重

   * @author: 栈长

   * @from: 公众号Java技术栈

  @Test

  public void remove4() {

   List String list = new ArrayList(initList);

   List String list2 = new ArrayList(new LinkedHashSet(list));

   System.out.println(list2);

  

 

  输出结果:

  [张三, 李四, 周一, 刘四, 李强, 李白, 王五]

  这下顺序对了吧,LinkedHashSet 可以保证元素的顺序性!

  5、Stream 去重

  

/**

 

   * Stream 去重

   * @author: 栈长

   * @from: 公众号Java技术栈

  @Test

  public void remove5() {

   List String list = new ArrayList(initList);

   list = list.stream().distinct().collect(Collectors.toList());

   System.out.println(list);

  

 

  利用 Stream 的 distinct 方法去重,这个方法也十分简单,一行代码搞定!Stream 基础就不介绍了,Stream 系列我之前写过一个专题了,不懂的关注公众号Java技术栈,然后在公众号 Java 教程菜单中阅读。

  输出结果:

  [张三, 李四, 周一, 刘四, 李强, 李白, 王五]

  本文总结了 5 种去除 List 重复元素的方法:

  for 循环添加去重

  for 双循环去重

  for 循环重复坐标去重

  Set 去重

  Stream 去重

  最后两种方案最简单,都是一行代码就能搞定的,推荐使用!

  所以说,你身边还有谁不会删除 List 中的元素?还有谁不会 List 去重的?把这篇文章发给他吧,让大家少走弯路,少写垃圾代码,共同进步。

  本文所有完整示例源代码已经上传:

  https://github.com/javastacks/javastack

  欢迎 Star 学习,后面 Java 示例都会在这上面提供!

  你还知道哪些去重技巧?欢迎留言分享~

  好了,今天的分享就到这里了,后面栈长会分享更多好玩的 Java 技术和最新的技术资讯,关注公众号Java技术栈第一时间推送,我也将主流 Java 面试题和参考答案都整理好了,在公众号后台回复关键字 "面试" 进行刷题。

  版权声明: 本文系公众号 "Java技术栈" 原创,转载、引用本文内容请注明出处,抄袭、洗稿一律投诉侵权,后果自负,并保留追究其法律责任的权利。

  近期热文推荐:

  1.1,000+ 道 Java面试题及答案整理(2022最新版)

  2.劲爆!Java 协程要来了。。。

  3.Spring Boot 2.x 教程,太全了!

  4.别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!

  5.《Java开发手册(嵩山版)》最新发布,速速下载!

  觉得不错,别忘了随手点赞+转发哦!

  以上就是面试官:怎么去除 List 中的重复元素?我一行代码搞定,赶紧拿去用!()的详细内容,想要了解更多 面试官:怎么去除 List 中的重复元素?我一行代码搞定,赶紧拿去用!的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: