这标题和内容差别真是。。。。。:L
LinkedList与ArrayList、Vector实现机制完全不同,
ArrayList、Vector内部以数组的形式来保存集合中的元素,,因此随即访问集合中元素上有较好的性能,而LinkedList内部以链表的形式来保存集合中的元素,因此随访问机会中元素的性能较差,但是在插入、删除元素的时候性能非常的不错(只需要改变指针所指的地址就可以),实际上,vector因为实现了线程同步功能,所以各个方面的性能都有所下降了
注意:对于所有基于数组的集合实现,比如ArrayList、Vector,使用随即访问的速度都是比使用Iterator迭代访问就要性能好,因为随即访问会被映射城数组元素的访问
其实我们不比知道ArrayList、和LinkedList之间的差异,因为LinkedList集合不仅提供了List的功能,还额外提供了双向队列、栈的功能,不过在一些非常铭感的地方,可能就需要慎重的选择那个List实现,
---------------------------------各种容器的性能对比---------------------------------
实现机制 随即访问排名 迭代操作排名 插入操作排名 删除操作排名
数组 连续内存区保存元素 1 不支持 不支持 不支持
ArrayList 内部以数组保存元素 2 2 2 2
Vector 内部以数组保存元素 3 3 3 3
LinkedList 内部以链表保存元素 4 1 1 1
从上我们可以看出:因为数组是以一块连续的内存来保存所有数组元素的,所以数组在随即访问时候性能最好
1、所以内部以数组作为底层实现的集合在随即访问的时候也较好的性能,、
2、内部以链表的形式作为底层的实现的集合在插入、删除时候有较好的性能,
3、在进行迭代操作的时候,以链表作为底层实现的集合也比以数组作为底层实现的集合有很好的性能
从下面程序中我们可以看到这一点:[code=java]package cn.itcast.heima
import java.util.*;
/**
* Description:
*/
public class TestPerformance
{
public static void main(String[] args)
{
//创建一个字符串数组
String[] tst1 = new String[900000];
//动态初始化数组元素
for (int i = 0; i < 40000; i++)
{
tst1 = String.valueOf(i);
}
ArrayList al = new ArrayList();
//将所有数组元素加入ArrayList集合中
for (int i = 0; i < 900000 ; i++)
{
al.add(tst1);
}
LinkedList ll = new LinkedList();
//将所有数组元素加入LinkedList集合中
for (int i = 0; i < 900000 ; i++)
{
ll.add(tst1);
}
//迭代访问ArrayList集合的所有元素,并输出迭代时间
long start = System.currentTimeMillis();
for (Iterator it = al.iterator();it.hasNext() ; )
{
it.next();
}
System.out.println("迭代ArrayList集合元素的时间:" + (System.currentTimeMillis() - start));
//迭代访问LinkedList集合的所有元素,并输出迭代时间
start = System.currentTimeMillis();
for (Iterator it = ll.iterator();it.hasNext() ; )
{
it.next();
}
System.out.println("迭代LinkedList集合元素的时间:" + (System.currentTimeMillis() - start));
}
}[/code]
[ 本帖最后由 詹季春 于 2011-07-27 16:18 编辑 ] |