01

实现思路:使用两个for循环遍历集合所有元素,然后进行判断是否有相同元素,如果有,则去除。这种方式是大部分最先想到的,也是最简单的实现方式。其中,这种方式可以保证List集合原来的顺序不变。

代码实现:

/**
* notes:使用两个for循环实现List去重
* @param list
* @return
*/
public static List repeatListWayOne(List<String> list){
   for(int i = 0;i < list.size();i++){
       for(int j = i+1;j < list.size();j++){
           if(list.get(i).equals(list.get(j))){
               list.remove(j);
           }
       }
   }
   return list;
}

02

实现思路:我们知道HashSet实现了Set接口,不允许出现重复元素。可以基于这个想法,把List集合所有元素存入HashSet对象,接着把List集合元素全部清空,最后把HashSet对象元素全部添加至List集合中,这样就可以保证不出现重复元素。而HashSet有一个构造函数,在初始化时可以直接添加元素。其中,HashSet不能保证顺序不变,所以此方式不能保证List集合原来的顺序不变。

/**
* notes:使用HashSet实现List去重
* @param list
* @return
*/
public static List repeatListWayTwo(List<String> list){
  //初始化HashSet对象,并把list对象元素赋值给HashSet对象
  HashSet set = new HashSet(list);
  //把List集合所有元素清空
  list.clear();
  //把HashSet对象添加至List集合
  list.addAll(set);
  return list;
}

实现思路:TreeSet集合也是实现Set接口,是一个有序的,并且无重复元素集合。同理,我们可以根据上面方式二的思想进行去重。其中,去重后的List集合可以保证和原来的顺序一致。

/**
* notes:使用TreeSet实现List去重
* @param list
* @return
*/
public static List repeatListWayThird(List<String> list){
   //初始化TreeSet对象,并把list对象元素赋值给TreeSet对象
   TreeSet set = new TreeSet(list);
   //把List集合所有元素清空
   list.clear();
   //把TreeSet对象添加至List集合
   list.addAll(set);
   return list;
}

04

实现思路:利用List集合contains方法循环遍历,先创建新的List集合,接着循环遍历原来的List集合,判断新集合是否包含有旧集合,如果有,则不添加至新集合,否则添加。最后,把旧集合清空,把新集合元素赋值给旧集合。

代码实现:

/**
* notes:利用List集合contains方法循环遍历去重
* @param list
* @return
*/
public static List repeatListWayFourth(List<String> list){
   //新建新List集合,用于存放去重后的元素
   List<String> newList = new ArrayList<String>();
   //循环遍历旧集合元素
   for(int i = 0; i < list.size(); i++ ){
       //判断新集合是否包含有,如果不包含有,则存入新集合中
       boolean isContains = newList.contains(list.get(i));
       if(!isContains){
           newList.add(list.get(i));
       }
   }
   //把List集合所有元素清空
   list.clear();
   //把新集合元素添加至List集合
   list.addAll(newList);
   return list;
}

上面给大家介绍了四种List集合去重方式。那么,哪种方式效率是最好的呢?下面就演示一下进行对比。

java List 去重方式及效率对比的更多相关文章

  1. java List去重方式及效率对比

    对List去重并保证添加顺序主要有三种方式: 方式一,利用HashSet不能添加重复数据的特性 由于HashSet不能保证添加顺序,所以只能作为判断条件: private static void re ...

  2. List集合去重方式及效率对比

    List集合相信大家在开发过程中几乎都会用到.有时候难免会遇到集合里的数据是重复的,需要进行去除.然而,去重方式有好几种方式,你用的是哪种方式呢?去重方式效率是否是最高效.最优的呢?今天就给大家讲解一 ...

  3. java中多种写文件方式的效率对比实验

    一.实验背景 最近在考虑一个问题:“如果快速地向文件中写入数据”,java提供了多种文件写入的方式,效率上各有异同,基本上可以分为如下三大类:字节流输出.字符流输出.内存文件映射输出.前两种又可以分为 ...

  4. 浅谈集合框架四——集合扩展:集合循环输出方式及list输出方式的效率对比

    最近刚学完集合框架,想把自己的一些学习笔记与想法整理一下,所以本篇博客或许会有一些内容写的不严谨或者不正确,还请大神指出.初学者对于本篇博客只建议作为参考,欢迎留言共同学习. 之前有介绍集合框架的体系 ...

  5. java list去重方式,以及效率问题

    之前面试被问到关于java如何去重的问题,当时没怎么留意,今天刚好项目中用到了,所以记录一下. 实体类: /** * 用户类 */ class User{ private String usernam ...

  6. java map遍历方式及效率

    本文转载自Java Map遍历方式的选择. 只给出遍历方式及结论.测试数据可以去原文看. 如果你使用HashMap 同时遍历key和value时,keySet与entrySet方法的性能差异取决于ke ...

  7. Java——反射三种方式的效率对比

    转载自:https://blog.csdn.net/aitcax/article/details/52694423 1 使用field(效率最高)             long start = S ...

  8. 将List按照指定大小等分的几种实现方式和效率对比及优化

    今天碰到一个需求,定时任务,批量从表里取数据并做一些其他操作然后再存表,每次取1000条,由于计算过程比较耗时所以要起多个线程同时跑,需要将List按照指定大小等分,如每100条数据起一个线程,若最后 ...

  9. python下图像读取方式以及效率对比

    https://zhuanlan.zhihu.com/p/30383580 opencv速度最快,值得注意的是mxnet的采用多线程读取的方式,可大大加速

随机推荐

  1. nginx 的 content阶段的root指令与alias指令

    root 与alias指令 Syntax: alias path; Default: — Context: location Syntax: root path; Default: root html ...

  2. Apache+Php+Mysql配置

    软件工具:(下载时注意下载相应版本,不同版本安装细节可能会有差异!!) 1>httpd-2.4.18-win64-VC14.zip 下载地址: http://www.apachelounge.c ...

  3. @override编译报错

    今天突然遇到一个问题,明明我重写的接口的方法,编译的时候一直报@override is not override a method from superclass,查了一下资料,这个@override ...

  4. spring boot 中容器 Jetty、Tomcat、Undertow

    spring boot 中依赖tomcat <dependency> <groupId>org.springframework.boot</groupId> < ...

  5. day20-Python运维开发基础(装饰器 / 类中的方法 / 类的方法变属性)

    1. 装饰器 / 类中的方法 / 类的方法变属性 # ### 装饰器 """ 定义:装饰器用于拓展原来函数功能的一种语法,返回新函数替换旧函数 优点:在不更改原函数代码的 ...

  6. AngularJS四大特征

    AngularJS四大特征 1.MVC模式 Angular遵循软件工程的MVC模式,并鼓励展现,数据,和逻辑组件之间的松耦合.通过依赖注入(dependency injection),Angular为 ...

  7. 498. (leetcode)对角线遍历

    498. 对角线遍历 根据题目的图像看,主要有两种走法,第一种是向右上(顺时针方向),第二种是向左下(逆时针)走 我们设 x ,y初始为0,分别对应横纵坐标 现在分析右上(0,2) 为例:(注意右上的 ...

  8. CentOS 下的apache服务器配置与管理

    一.WEB服务器与Apache1.web服务器与网址 2.Apache的历史 3.补充http://www.netcraft.com/可以查看apache服务器的市场占有率同时必须注意的是ngnix, ...

  9. Python - Mro

    参考 https://stackoverflow.com/questions/2010692/what-does-mro-do http://python.jobbole.com/85685/ 问题: ...

  10. esxi虚拟机无法开机,提示“没有更多空间可供虚拟磁盘server-000001.vmdk使用。也许通过释放相关卷上的磁盘空间并单击 重试 继续此会话,单击 取消 可终止此会话”

    背景:esxi安装在32G的U盘上,硬盘总大小:1.64T,虚拟机A占用:600GB,虚拟机B占用:900GB.所以还有剩余不到200G左右. 原因是宿主机硬盘空间不足.通过图中可以看出空间已经只剩2 ...