介绍了ArrayList集合去重的三种方式,以及排序的两种方式,以及反射获取ArrayList的容量,以及Array和ArrayList的区别。

文章目录

  • 1 Array和ArrayList的区别以及使用条件
  • 2 List去重
    • 2.1 借助辅助集合
    • 2.2 利用迭代器
    • 2.3 利用java8的lambda
  • 3 List排序
  • 4 反射获取ArrayList的容量
  • 5 迭代器和for循环速度测试

1 Array和ArrayList的区别以及使用条件

Array 和 ArrayList都是存放数据的容器.array是代表的是数组,arraylist是一个集合,arraylist底层使用的封装了一个object数组。它的可变就是数组扩容。

区别:

  1. Array可以包含基本类型和对象类型,ArrayList只能包含对象类型,jdk1.5之后传入基本类型会自动装箱。
  2. Array数组在存放的时候一定是同种类型的元素。ArrayList就不一定了,因为ArrayList可以存储Object。
  3. Array大小是固定的,ArrayList的大小是动态变化的。
  4. ArrayList作为Array的增强版,当然是在方法上比Array更多样化,比如添加全部addAll()、删除全部removeAll()、返回迭代器iterator()等。

使用条件:

  1. 当存放的内容数量不固定,不确定,有限时采用arraylist。
  2. 如果想要保存一些在整个程序运行期间都会存在而且不变的数据,可以放在数组里。
  3. 如果我们需要对元素进行频繁的移动或删除,或者是处理的是超大量的数据,那么,使用ArrayList的效率很低,使用数组进行这样的容量调整动作很麻烦,我们可以选择LinkedList。

2 List去重

2.1 借助辅助集合

借助辅助集合

ArrayList<String> al = new ArrayList<String>();
al.add("aa");
al.add("bb");
al.add("aa");
al.add("dd");
al.add("dd");
al.add("dd");
al.add(null);
al.add("ee");
al.add("ee");
//去重思路一  借助辅助集合
ArrayList<String> al2 = new ArrayList<String>();
for (String s : al) {if (!al2.contains(s)){al2.add(s);}
}
al.clear();
al.addAll(al2);
System.out.println(al);   //[aa, bb, dd, null, ee]

2.2 利用迭代器

直接利用列表迭代器,无需借助辅助集合(打乱顺序)

ListIterator<String> sli = al.listIterator();
while (sli.hasNext()) {String next =  sli.next();   //获得下一个元素sli.remove();   //移除获得的元素if (!al.contains(next))  //判断源集合是否包含被移除的元素{sli.add(next);  //没包含就再添加进来}
}
System.out.println(al);

注意: contains(obj); remove(Object obj);

以上两个方法底层是依据equals方法:根据equals方法返回的值,判断是否移除/或者是判断是否存在。因此对对象去重时,需要重写equals方法,使得equals比较的是具体值而不是地址。

2.3 利用java8的lambda

使用Java8的lambda表达式轻松实现集合去重

al = al.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(HashSet::new), ArrayList::new));
System.out.println(al);

3 List排序

Clooections的sort方法快速实现排序:

public static <T extends Comparable<? super T>> void sort(List list) --自然排序
public static void sort(List list,Comparator<? super T> c) --自定义排序

4 反射获取ArrayList的容量

明显我们无法直接通过可用方法获取ArrayList的容量,因此只有使用反射获取:

// 获取list容量
public static Integer getCapacity(ArrayList list) {Integer length = null;Class clazz = list.getClass();Field field;try {field = clazz.getDeclaredField("elementData");field.setAccessible(true);Object[] object = (Object[]) field.get(list);length = object.length;return length;} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return length;
}

5 迭代器和for循环速度测试

一般来说,for循环速度更快。

public class ArrayListTest {static List<Integer> list = new ArrayList<Integer>();static {for (int i = 1; i <= 100000000; i++) {list.add(i);}}public static long arrayFor() {//开始时间long startTime = System.currentTimeMillis();for (int j = 0; j < list.size(); j++) {Object num = list.get(j);}//结束时间long endTime = System.currentTimeMillis();//返回所用时间return endTime - startTime;}public static long arrayIterator() {long startTime = System.currentTimeMillis();Iterator iterator = list.iterator();while (iterator.hasNext()) {Object next = iterator.next();}long endTime = System.currentTimeMillis();return endTime - startTime;}public static void main(String[] args) {long time1 = arrayFor();long time2 = arrayIterator();System.out.println("ArrayList for循环所用时间==" + time1);System.out.println("ArrayList 迭代器所用时间==" + time2);}
}

如果有什么不懂或者需要交流,可以留言。另外希望点赞、收藏、关注,我将不间断更新各种Java学习博客!

ArrayList的去重、排序以及其他应用相关推荐

  1. #笔记 如何对ArrayList进行去重、排序

    知识点巩固 首先明确两个点 ArraryList ArrayList虽然是有序的但它是按照存入顺序进行保存,并不是我们所想的排序: ArrayList<Integer> list = ne ...

  2. 题库练习2(随机数去重排序、分割字符串、进制转换)

    1. 随机数去重排序 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉 ...

  3. java 数组去重排序_Java实现的数组去重与排序操作详解

    本文实例讲述了Java实现的数组去重与排序操作.分享给大家供大家参考,具体如下: 这里演示Java实现数组去重.排序操作 文中的示例源码编写基于Jdk1.6+.junit4.8.2 java.util ...

  4. sql按时间取去重最近_sql 去重排序及 java分页

    一.sql去重排序: 需求,对数据库数据按mfrom去重(显示最新数据),并对去重后的数据按mcreated_time进行倒序排列: sql语句为: (1)SELECT * FROM messages ...

  5. python中排序英文单词怎么写_Python实现对文件进行单词划分并去重排序操作示例...

    本文实例讲述了Python实现对文件进行单词划分并去重排序操作.,具体如下: 文件名:test1.txt 文件内容: But soft what light through yonder window ...

  6. Java ArrayList的不同排序方法

    由于其功能性和灵活性,ArrayList是 Java 集合框架中使用最为普遍的集合类之一.ArrayList 是一种 List 实现,它的内部用一个动态数组来存储元素,因此 ArrayList 能够在 ...

  7. python编程单词排序_Python实现对文件进行单词划分并去重排序操作示例

    本文实例讲述了Python实现对文件进行单词划分并去重排序操作.分享给大家供大家参考,具体如下: 文件名:test1.txt 文件内容: But soft what light through yon ...

  8. excel如何去重统计户数_公式解读第三期 单元格中数字如何去重排序?

    公式解读 第三期 -单元格中数字的去重排序!本期涉及到函数较多,你可以一次性根据这个案例,学习多少很多常用 函数的用法,同时我也会讲解思路,这个很重要,思路决定了出路.直接先看一下我们的效果图: 效果 ...

  9. 去重+排序板子(set+map)

    题意: 给定n个数,去重排序后输出个数和每个数 1.map实现 #pragma GCC optimize("O2") #include<iostream> #inclu ...

最新文章

  1. Failed to open zip file. Gradle‘s dependency cache may be corrupt (xx)
  2. SAP的号码范围(number range)SNRO和SNUM自动编号工具的用法
  3. 项目管理过程组(5)与知识领域(10)
  4. 前端:uniapp封装组件用法笔记
  5. Windows下利用C++实现Git自动克隆项目
  6. 只显示 前100个字 java 实现截取字符串!使用! c:if test=${fn:length(onebeans.info)100 }${ fn:substri...
  7. 邮件服务器突然很慢,原因探究与处理
  8. [整理]Linux压缩与解压缩命令整理。
  9. 读取文件,解决中文乱码问题
  10. java异常处借接错书_利用Java异常机制实现模拟借书系统
  11. 2022年11月份PMP考试是新版教材吗?
  12. RGB在线取色器,可视化三通道颜色
  13. phpwind测试之phpwind安装(二)
  14. android highcharts柱状图实例,Highcharts 基本柱形图
  15. VTT到底需要多少个电容
  16. 【目标检测】(10) Mosaic 数据增强方法,附Python完整代码
  17. linux - 时间时区设置
  18. 常用工具类 (三) : Hutool 常用工具类整理 (全)
  19. 论文|Item2vec论文中值得细细品味的8个经典tricks和thinks
  20. 漏洞复现----42、Spring Cloud Gateway Actuator API SpEL表达式注入命令执行(CVE-2022-22947)

热门文章

  1. excel html 列宽,POI精确设置Excel的行高和列宽
  2. GIF录屏/剪辑小工具screentogift、 免费截图贴图工具Snipaste
  3. 浅析丨实体交易如何上链?
  4. VUE/使用echarts格式化浮窗自定义按钮及事件
  5. 先电云计算大赛大数据平台搭建
  6. 论文笔记《Selective Search for object recognition》
  7. 无货源淘宝,新手小白快速进入电商圈的捷径
  8. SOLO在windows 10环境下安装
  9. 达梦数据库 登录“6061:通信加密协商失败”的解决办法
  10. 详谈为什么要写测试用例