ArrayList的去重、排序以及其他应用
介绍了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数组。它的可变就是数组扩容。
区别:
- Array可以包含基本类型和对象类型,ArrayList只能包含对象类型,jdk1.5之后传入基本类型会自动装箱。
- Array数组在存放的时候一定是同种类型的元素。ArrayList就不一定了,因为ArrayList可以存储Object。
- Array大小是固定的,ArrayList的大小是动态变化的。
- ArrayList作为Array的增强版,当然是在方法上比Array更多样化,比如添加全部addAll()、删除全部removeAll()、返回迭代器iterator()等。
使用条件:
- 当存放的内容数量不固定,不确定,有限时采用arraylist。
- 如果想要保存一些在整个程序运行期间都会存在而且不变的数据,可以放在数组里。
- 如果我们需要对元素进行频繁的移动或删除,或者是处理的是超大量的数据,那么,使用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的去重、排序以及其他应用相关推荐
- #笔记 如何对ArrayList进行去重、排序
知识点巩固 首先明确两个点 ArraryList ArrayList虽然是有序的但它是按照存入顺序进行保存,并不是我们所想的排序: ArrayList<Integer> list = ne ...
- 题库练习2(随机数去重排序、分割字符串、进制转换)
1. 随机数去重排序 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉 ...
- java 数组去重排序_Java实现的数组去重与排序操作详解
本文实例讲述了Java实现的数组去重与排序操作.分享给大家供大家参考,具体如下: 这里演示Java实现数组去重.排序操作 文中的示例源码编写基于Jdk1.6+.junit4.8.2 java.util ...
- sql按时间取去重最近_sql 去重排序及 java分页
一.sql去重排序: 需求,对数据库数据按mfrom去重(显示最新数据),并对去重后的数据按mcreated_time进行倒序排列: sql语句为: (1)SELECT * FROM messages ...
- python中排序英文单词怎么写_Python实现对文件进行单词划分并去重排序操作示例...
本文实例讲述了Python实现对文件进行单词划分并去重排序操作.,具体如下: 文件名:test1.txt 文件内容: But soft what light through yonder window ...
- Java ArrayList的不同排序方法
由于其功能性和灵活性,ArrayList是 Java 集合框架中使用最为普遍的集合类之一.ArrayList 是一种 List 实现,它的内部用一个动态数组来存储元素,因此 ArrayList 能够在 ...
- python编程单词排序_Python实现对文件进行单词划分并去重排序操作示例
本文实例讲述了Python实现对文件进行单词划分并去重排序操作.分享给大家供大家参考,具体如下: 文件名:test1.txt 文件内容: But soft what light through yon ...
- excel如何去重统计户数_公式解读第三期 单元格中数字如何去重排序?
公式解读 第三期 -单元格中数字的去重排序!本期涉及到函数较多,你可以一次性根据这个案例,学习多少很多常用 函数的用法,同时我也会讲解思路,这个很重要,思路决定了出路.直接先看一下我们的效果图: 效果 ...
- 去重+排序板子(set+map)
题意: 给定n个数,去重排序后输出个数和每个数 1.map实现 #pragma GCC optimize("O2") #include<iostream> #inclu ...
最新文章
- Failed to open zip file. Gradle‘s dependency cache may be corrupt (xx)
- SAP的号码范围(number range)SNRO和SNUM自动编号工具的用法
- 项目管理过程组(5)与知识领域(10)
- 前端:uniapp封装组件用法笔记
- Windows下利用C++实现Git自动克隆项目
- 只显示 前100个字 java 实现截取字符串!使用! c:if test=${fn:length(onebeans.info)100 }${ fn:substri...
- 邮件服务器突然很慢,原因探究与处理
- [整理]Linux压缩与解压缩命令整理。
- 读取文件,解决中文乱码问题
- java异常处借接错书_利用Java异常机制实现模拟借书系统
- 2022年11月份PMP考试是新版教材吗?
- RGB在线取色器,可视化三通道颜色
- phpwind测试之phpwind安装(二)
- android highcharts柱状图实例,Highcharts 基本柱形图
- VTT到底需要多少个电容
- 【目标检测】(10) Mosaic 数据增强方法,附Python完整代码
- linux - 时间时区设置
- 常用工具类 (三) : Hutool 常用工具类整理 (全)
- 论文|Item2vec论文中值得细细品味的8个经典tricks和thinks
- 漏洞复现----42、Spring Cloud Gateway Actuator API SpEL表达式注入命令执行(CVE-2022-22947)