ArrayList 和 LinkedList哪个迭代操作快
我看书上说是LinkedList做迭代操作更快一点,可是我实际做实验却不是,请问这个是什么原因呃?代码如下:String[]test1=newString[900000]...
我看书上说是LinkedList做迭代操作更快一点,可是我实际做实验却不是,请问这个是什么原因呃?代码如下:
String[] test1 = new String[900000]; for(int i=0;i<900000;i++){ test1[i]=String.valueOf(i); } ArrayList a1 = new ArrayList(); for(int i=0;i<900000;i++){ a1.add(test1[i]); } LinkedList ll = new LinkedList(); for(int i=0;i<900000;i++){ ll.add(test1[i]); } long start = System.currentTimeMillis(); for(Iterator it=ll.iterator();it.hasNext() ; ){ it.next(); } System.out.println("LinkedList迭代集合元素所用时间为:"+(System.currentTimeMillis()-start)); start = System.currentTimeMillis(); for (Iterator it=a1.iterator();it.hasNext() ; ) { it.next(); } System.out.println("ArrayList迭代集合元素所用时间为:"+(System.currentTimeMillis()-start)); 展开
String[] test1 = new String[900000]; for(int i=0;i<900000;i++){ test1[i]=String.valueOf(i); } ArrayList a1 = new ArrayList(); for(int i=0;i<900000;i++){ a1.add(test1[i]); } LinkedList ll = new LinkedList(); for(int i=0;i<900000;i++){ ll.add(test1[i]); } long start = System.currentTimeMillis(); for(Iterator it=ll.iterator();it.hasNext() ; ){ it.next(); } System.out.println("LinkedList迭代集合元素所用时间为:"+(System.currentTimeMillis()-start)); start = System.currentTimeMillis(); for (Iterator it=a1.iterator();it.hasNext() ; ) { it.next(); } System.out.println("ArrayList迭代集合元素所用时间为:"+(System.currentTimeMillis()-start)); 展开
3个回答
展开全部
追问
我试了好多次,还是相反的结果
追答
受你精神的刺激,刚才我狠狠谈久了一番,收获不小
首先不知道你学没学过数据结构,正如前面两位所言,链接表比顺序表遍历要快
但是在Java集合中,你使用了Iterator迭代器,迭代器模式为每个特定的数据结构提供了最好的遍历算法,因此你用ArrayList迭代比LinkedList快也不意外,这涉及到Java集合底层的细节,有空你可以研究研究。
而如果不用迭代器,在for循环中用List.get(下标)的方法,你会发现链表的遍历速度远远慢于ArrayList,这正充分说明了两种集合的特点
展开全部
因为你的 ArrayList 存放元素大小是固定的,并且在事先已经指定并开僻了指定数量的容量的数组空间,实际上只是对数组进行了操作。
而 LinkedList 是采用链表实现的,在事先无法指定容量,每添加一个数据都得去开僻新的空间。
如果在添加时这样进行比较的话,对于 LinkedList 是很不公平的。
对于迭代来说,ArrayList 速度远比 LinkedList 慢,因为链表迭代是很快的,如果要让 ArrayList 比 LinkedList 快的话,可以使用下标索引。
一般来说,ArrayList 和 LinkedList 具体使用哪一个以下这些我总结的使用规则:
1:事先能预知元素数量时,应优先选择 ArrayList,并且在构造中进行初始化
2:事先不能预知元素数量时,根据不同的迭代需要选择 ArrayList 或者 LinkedList
3:如果有很多的 remove 操作时,应优先选择 LinkedList
4:需要顺序迭代,也就是从第一个元素开始一个一个地访问到最后一个时,应优先选择 LinkedList
5:需要随机访问,也就是使用 get(int) 方法取任意下标访问时,应优先选择 ArrayList
而 LinkedList 是采用链表实现的,在事先无法指定容量,每添加一个数据都得去开僻新的空间。
如果在添加时这样进行比较的话,对于 LinkedList 是很不公平的。
对于迭代来说,ArrayList 速度远比 LinkedList 慢,因为链表迭代是很快的,如果要让 ArrayList 比 LinkedList 快的话,可以使用下标索引。
一般来说,ArrayList 和 LinkedList 具体使用哪一个以下这些我总结的使用规则:
1:事先能预知元素数量时,应优先选择 ArrayList,并且在构造中进行初始化
2:事先不能预知元素数量时,根据不同的迭代需要选择 ArrayList 或者 LinkedList
3:如果有很多的 remove 操作时,应优先选择 LinkedList
4:需要顺序迭代,也就是从第一个元素开始一个一个地访问到最后一个时,应优先选择 LinkedList
5:需要随机访问,也就是使用 get(int) 方法取任意下标访问时,应优先选择 ArrayList
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
个人觉得讨论这个意义不大
一个是底层是数组
一个是链表
查找就Arraylist
增删改多的话就LinkedList
你这个和电脑的运行环境有很大关系 线程轮转 差几毫秒是必须的
一个是底层是数组
一个是链表
查找就Arraylist
增删改多的话就LinkedList
你这个和电脑的运行环境有很大关系 线程轮转 差几毫秒是必须的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询