java vector效率_java的list几种实现方式的效率(ArrayList、LinkedList、Vector、Stack),以及 java时间戳的三种获取方式比较...

一、list简介

List列表类,顺序存储任何对象(顺序不变),可重复。

List是继承于Collection的接口,不能实例化。实例化可以用:

ArrayList(实现动态数组),查询快(随意访问或顺序访问),增删慢。整体清空快,线程不同步(非线程安全)。数组长度是可变的百分之五十延长

LinkedList(实现链表),查询慢,增删快。

Vector(实现动态数组),都慢,被ArrayList替代。长度任意延长。线程安全(同步的类,函数都是synchronized)

Stack(实现堆栈)继承于Vector,先进后出。

所以,快速访问ArrayList,快速增删LinkedList,单线程都可以用,多线程只能用同步类Vector

list基本操作

插入:add()

查找:get()

删除:remove(int index)

修改:set()

清空表:clear()

遍历:用Iterator迭代器遍历每个元素,如

List al = new ArrayList();

Iterator it = al.iterator()

while (it.hasNext())

{

System.out.println(it.next().toString());

}

此外,其他函数

boolean add(int index, E element)

boolean addAll(index,Collection)

二、ArrayList和LinkedList的效率比较

2.1 原理

顺序存储是将数据元素存放于一个连续的存储空间中,实现顺序存取或(按下标)直接存取。存储效率高,速度快。但空间大小一经定义,在程序整个运行期间不会发生改变,因此,不易扩充。同时,由于在插入或删除时,为保持原有次序(没有规定元素进栈顺序),平均需要移动一半(或近一半)元素,修改效率不高。

链接存储表示的存储空间一般在程序的运行过程中动态分配和释放,且只要存储器中还有空间,就不会产生存储溢出的问题。同时在插入和删除时不需要保持数据元素原来的物理顺序,只需要保持原来的逻辑顺序,因此不必移动数据,只需修改它们的链接指针,修改效率较高。但存取表中的数据元素时,只能循链顺序访问,因此存取效率不高。

2.2 代码测试

package test;

import java.util.ArrayList;

import java.util.LinkedList;

import java.util.List;

public class ListTest {

public static void main(String[] args) {

List LList = new LinkedList ();

List AList = new ArrayList ();

long startTime = System.currentTimeMillis();

for(int i=0;i<10000;i++)

{

LList.add(""+i);

}

long endTime = System.currentTimeMillis();

long result = endTime - startTime;

System.out.println("linkedlist:"+result);

startTime = System.currentTimeMillis();

for(int i=0;i<10000;i++)

{

AList.add(""+i);

}

endTime = System.currentTimeMillis();

result = endTime - startTime;

System.out.println("arraylist:"+result);

}

结果发现速度上ArrayList 比LinkedList要快的多

这里用来获取时间戳(毫秒)来计算时间的方式用三种,

//方法一 速度最快

System.currentTimeMillis();

//方法二 比方法一慢,低于一倍的时间

new Date().getTime();

//方法三 速度最慢,Canlendar处理时区耗时

Calendar.getInstance().getTimeInMillis();

结论:

1.随机插入、随机删除操作中,用TreeList 效率最高;

2.在只需要追加、迭代的环境下,LinkedList 效率最高;

3.平均效率来讲,ArrayList 相对平衡,但如果海量随机操作,还是会造成性能瓶颈;

4.CopyOnWriteArrayList 因为线程安全的原因,致使性能降低很多,所以慎用;

5.Vector 没有传说中那么低的效率;

6.让Stack 来做List 的事可以,不过语义上Stack 不应该做过多的List 的事情;

7.在排序中,ArrayList 具有最好的性能,TreeList 平均性能也不错,LinkedList 的排序效率受元素初始状态的影响很大。

8.各种List 间转换几乎没有时间损耗。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值