博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java基础【七】 - List集合汇总
阅读量:6983 次
发布时间:2019-06-27

本文共 2887 字,大约阅读时间需要 9 分钟。

List接口特点

List 接口存储一组允许重复,有序(插入顺序)的对象,有下标,插入顺序作为遍历的顺序。

List接口的三个常用实现类

图片描述

使用场景

1、对插入元素数据的速度要求不高,但是要求快速访问元素数据,则使用ArrayList。

2、对访问元素数据速度不做要求不高,但是对插入和删除元素数据速度要求高的情况,则使用LinkedList。
3、有多线程对集合元素进行操作时候,则使用Vector,但是现在一般不再使用Vector,如需在多线程下使用,可以用CopyOnWriteArrayList,在java.util.concurrent包下。
4、有需求是希望后保存的数据先读取出来,则使用Stack;基于数组实现的,是栈,它继承与Vector。

List转数组方法

ArrayList
list=new ArrayList
();String[] strings = new String[list.size()];list.toArray(strings);

数组转成List

String[] s = {"a","b","c"};List list = java.util.Arrays.asList(s);

性能测试

/* * 性能测试,通过插入、随机读取和删除对ArrayList、LinkedList、Vector和Stack进行测试! * 结论:看LinkedList *  插入10万个元素,LinkedList所花时间最短:17 ms。 *  删除10万个元素,LinkedList所花时间最短: 9 ms。 *  遍历10万个元素,LinkedList所花时间最长:10255 ms;而ArrayList、Stack和Vector则相差不多,都只用了几秒。 *  (1) 对于需要快速插入,删除元素,应该使用LinkedList。 *  (2) 对于需要快速随机访问元素,应该使用ArrayList。 *  */public class ListTest {    private static final int COUNT = 100000; //十万    private static ArrayList arrayList = new ArrayList();    private static LinkedList linkedList = new LinkedList();    private static Vector vector = new Vector(); private static Stack stack = new Stack(); public static void main(String[] args) { System.out.println("....开始测试插入元素.........."); // 插入元素测试 insertData(arrayList,"ArrayList") ; insertData(linkedList,"LinkedList") ; insertData(vector,"Vector") ; insertData(stack,"Stack") ; System.out.println("....开始测试读取元素.........."); // 随机读取元素测试 readAccessData(arrayList,"ArrayList") ; readAccessData(linkedList,"LinkedList") ; readAccessData(vector,"Vector") ; readAccessData(stack,"Stack") ; System.out.println("....开始测试删除元素.........."); // 随机读取元素测试 deleteData(arrayList,"ArrayList") ; deleteData(linkedList,"LinkedList") ; deleteData(vector,"Vector") ; deleteData(stack,"Stack") ; } /** * 指定的List 的子类中插入元素,并统计插入的时间 * @param list List 的子类 * @param name 子类的名称 */ private static void insertData(List list,String name) { long startTime = System.currentTimeMillis(); // 向list的位置0插入COUNT个数 for (int i=0; i
list,String name) { long startTime = System.currentTimeMillis(); // 删除list第一个位置元素 for (int i=0; i
list,String name) { long startTime = System.currentTimeMillis(); // 读取list元素 for (int i = 0; i < COUNT; i++) list.get(i); long endTime = System.currentTimeMillis(); long interval = endTime - startTime; System.out.println(name + " : 随机读取 "+COUNT+"元素, 使用的时间是 " + interval+" ms"); }}

输出结果:

....开始测试插入元素..........ArrayList : 插入 100000元素, 使用的时间是 970 msLinkedList : 插入 100000元素, 使用的时间是 17 msVector : 插入 100000元素, 使用的时间是 968 msStack : 插入 100000元素, 使用的时间是 888 ms....开始测试读取元素..........ArrayList : 随机读取 100000元素, 使用的时间是 6 msLinkedList : 随机读取 100000元素, 使用的时间是 10255 msVector : 随机读取 100000元素, 使用的时间是 8 msStack : 随机读取 100000元素, 使用的时间是 4 ms....开始测试删除元素..........ArrayList : 删除 100000元素, 使用的时间是 1460 msLinkedList : 删除 100000元素, 使用的时间是 9 msVector : 删除 100000元素, 使用的时间是 1472 msStack : 删除 100000元素, 使用的时间是 894 ms

如果内容对你有帮助希望点赞收藏谢谢!!!

转载地址:http://yotpl.baihongyu.com/

你可能感兴趣的文章
solr多core的处理
查看>>
解决DeferredResult 使用 @ResponseBody 注解返回中文乱码
查看>>
C# WinForm开发系列 - TextBox
查看>>
28岁少帅统领旷视南京研究院,LAMDA魏秀参专访
查看>>
java文件传输
查看>>
Xen虚拟机迁移技术
查看>>
SQL Server配置delegation实现double-hop
查看>>
iOS开发之检查更新
查看>>
安装Sql Server 2005出现“性能监视器计数器要求”错误解决方法。
查看>>
[.NET领域驱动设计实战系列]专题八:DDD案例:网上书店分布式消息队列和分布式缓存的实现...
查看>>
Icomparer和Icomparable集合排序
查看>>
【poi xlsx报错】使用POI创建xlsx无法打开
查看>>
UNIX环境高级编程笔记之文件I/O
查看>>
DIV+CSS规范命名
查看>>
4G U盘版64位bitcoin专用挖矿操作系统
查看>>
我的2013 Q.E.D
查看>>
2017 Multi-University Training Contest - Team 9 1002&&HDU 6162 Ch’s gift【树链部分+线段树】...
查看>>
4.5. Rspamd
查看>>
超级简单:在你的ASP.NET页面自定义列表和分页
查看>>
(原创)INTERVAL分区表与RANGE分区表相互转化
查看>>