java list 汇总_Java基础【七】 - List集合汇总

List接口特点

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

List接口的三个常用实现类

33c1240272a28479d629a94f582d10da.png

使用场景

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.add(0, i);

}

long endTime = System.currentTimeMillis();

long interval = endTime - startTime;

System.out.println(name + " : 插入 "+COUNT+"元素, 使用的时间是 " + interval+" ms");

}

/**

* 指定的List 的子类中删除元素,并统计删除的时间

* @param list List 的子类

* @param name 子类的名称

*/

private static void deleteData(List list,String name) {

long startTime = System.currentTimeMillis();

// 删除list第一个位置元素

for (int i=0; i

list.remove(0);

long endTime = System.currentTimeMillis();

long interval = endTime - startTime;

System.out.println(name + " : 删除 "+COUNT+"元素, 使用的时间是 " + interval+" ms");

}

/**

* 指定的List 的子类中读取元素,并统计读取的时间

* @param list List 的子类

* @param name 子类的名称

*/

private static void readAccessData(List 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 ms

LinkedList : 插入 100000元素, 使用的时间是 17 ms

Vector : 插入 100000元素, 使用的时间是 968 ms

Stack : 插入 100000元素, 使用的时间是 888 ms

....开始测试读取元素..........

ArrayList : 随机读取 100000元素, 使用的时间是 6 ms

LinkedList : 随机读取 100000元素, 使用的时间是 10255 ms

Vector : 随机读取 100000元素, 使用的时间是 8 ms

Stack : 随机读取 100000元素, 使用的时间是 4 ms

....开始测试删除元素..........

ArrayList : 删除 100000元素, 使用的时间是 1460 ms

LinkedList : 删除 100000元素, 使用的时间是 9 ms

Vector : 删除 100000元素, 使用的时间是 1472 ms

Stack : 删除 100000元素, 使用的时间是 894 ms

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值