ArrayList和LinkedList
来源:互联网 发布:淘宝客 要不要开 编辑:程序博客网 时间:2024/05/22 12:27
ArrayList和LinkedList都实现了List接口,区别在于它们存储的数据结构不同,它们都是线性存储结构,单ArrayList属于顺序式存储而LinkedList属于链式存储:
它们的大致区别是:
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
4.ArrayList每次add添加的对象后,取出来属于一个Object类型的数据。而LinkedList每次add添加元素之后,实际则是添加了一个Entry对象,Entry对象结构如下:
{
Entry previous;//指向上一个元素的索引
Object element;//本元素的具体数据
Entry next;//指向下一个元素的索引
}
测试程序:
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
public class ListTest
{
public static void main(String[] args)
{
List<String> list = new ArrayList<String>();
for(int i=0;i<5000;i++)
{
list.add("Test"+i);
}
System.out.println("ArrayList查找最后一个元素耗时:"+timeList(list,"Test4999"));
List<String> list1 = new LinkedList<String>();
for(int i=0;i<5000;i++)
{
list1.add("Error"+i);
}
System.out.println("LinkedList查找最后一个元素耗时:"+timeList(list1,"Error4999"));
}
static long timeList(List<String> lst,String str)
{
long start=System.currentTimeMillis();
for(int i=0;i<5000;i++)
{
Collections.binarySearch(lst, str);
}
return System.currentTimeMillis()-start;
}
}
多次测试结果如下:
ArrayList查找最后一个元素耗时:5
LinkedList查找最后一个元素耗时:579
----------------------------------------------------------
ArrayList查找最后一个元素耗时:7
LinkedList查找最后一个元素耗时:341
----------------------------------------------------------
ArrayList查找最后一个元素耗时:6
LinkedList查找最后一个元素耗时:339
总结:查找过程中由于LinkedList是链式的,所以每次查找都从第一个索引开始,但是ArrayList可以直接指向其中的索引。这就是两者最大的不同之处。配合上上面三条,两种继承于List接口的类操作的范围就要根据实际情况而确定。与常规的数组不同,常规的数组一般定义的时候需要直接定义数组的大小,那么数组在内存中的大小就是固定的,而继承于List接口的集合类,如(ArrayList和LinkedList)你,你可以不定义它的大小,它们在内存中的大小也不固定,如果利用它们默认的构造方法,new出来一个,那么默认它们的容量是10,也就是它们的索引最大为9;如果超过了这个初始值,它们扩充大小,但是每次扩充的范围有规律,譬如如下扩充过程:10->16->25->38->58->88->...
那么就可以认为大致规律如下:新容量=旧容量*(3/2)+1。
- ArrayList和LinkedList区别
- ArrayList、Vector和LinkedList
- LinkedList、ArrayList和Vector
- ArrayList和LinkedList区别
- ArrayList和LinkedList区别?
- ArrayList和LinkedList区别
- 使用arraylist和linkedlist
- ArrayList和LinkedList
- LinkedList,ArrayList和Vector
- ArrayList和LinkedList
- ArrayList和LinkedList比较
- ArrayList和LinkedList区别
- ArrayList、Vector和LinkedList
- ArrayList和LinkedList区别
- ArrayList、Vector和LinkedList
- ArrayList和LinkedList浅谈
- ArrayList和LinkedList实现
- Arraylist 和LinkedList
- 开源日志库<log4cplus+VS2008使用>整理
- 用NDK调用第三方动态库--个人总结
- IOS 构造和使用TableView(基于storyboard) (七)移动cell和section
- C#--struct结构
- 1、direct X 的简介
- ArrayList和LinkedList
- CloudStack 4.3 发布,支持微软Hyper-V
- c++ new 用法 总结
- 高阻态分析
- jquery serialize介绍
- Ext window的大小与屏幕匹配
- 黑马程序员_对“统计字符串各字符出现的次数”问题的思考
- Boost智能指针——scoped_ptr
- Android 存取数据之SharedPreferences