浅析ArrayList,LinkedList的执行效率
来源:互联网 发布:video.js 播放flv流 编辑:程序博客网 时间:2024/06/05 08:57
以前见过很多文章说这两个东西,感觉自己还是没有深入理解,今天看了书明白一些,在此提出来和大家共同探讨:
面试的时候(基础)一般会问你使用过LinkedList或者ArrayList没有,简单的回答有或者没有肯定不是面试官的期望答案,一般有经验的小伙伴都会说,如果该集合进行的增删操作比较多,建议使用LinkedList,如果是查询较多建议使用ArrayList,原理就用下面两个程序来说说吧:
(1) public static void makeList (List<Integer> list , int N) {
list.clear;
for(int i = 0 ; i <= N; i ++)
list.add( 0, i);
}
以上程序比较简单,就是在一个List的首位插入一个元素,以上程序毫无疑问,对于ArrayList来说,他的执行效率是O(N × N),但是对于LinkedList来说,他的执行效率为O(N),如果不太了解原因的小伙伴,估计是你不知道两种List的实现方式,ArrayList实现为数组,可以直接获取到对应位置的元素,但是添加需要以此移动该位置后面的每一个元素,LinkedList实现方式为链表,查询任何元素都必须从首元素开始扫描,删除则可以直接删除对应位置,无需移动后面的元素。明白这些以后,再来看下面的程序:
(2)public static void sum(List<Integer> list ) {
int total = 0;
for(int i = 0 ; i <= N; i ++)
total += list.get(i);
}
这里的执行效率与上面的刚好相反。
这里我们使用的便利list的方式都是一般的普通for循环,相信了解java的小伙伴都知道还有一个增强的for循环吧,对了,如果这里我们将(2)程序中的循环换成增强的for循环,那么他使用任何一种list的执行效率都是O(N),这是为什么呢?原因很简单,因为增强的for循环底层使用的是Iterator迭代器,该迭代器会保存list的每一个当前位置,并且有效的推进到下一位置,故效率一样了。正是由于使用增强的for循环底层是Iterator,该迭代器每次都会返回,因此我们使用增强的for循环时,不能对集合进行增加和删除,因为他会改变迭代器的结构,以至于会抛出异常ConcurrentModificationException,所以小伙伴们,知道以后怎么用了吧
- 浅析ArrayList,LinkedList的执行效率
- ArrayList 和 LinkedList的执行效率比较
- ArrayList与LinkedList的效率
- 关于LinkedList和ArrayList的执行效率的问题的区别(测试用例)
- 测试ArrayList和LinkedList的效率
- 关于ArrayList和LinkedList的效率问题
- 源码浅析 ArrayList、Vector、LinkedList 的区别
- 浅析ArrayList和LinkedList
- ArrayList和LinkedList效率解说
- 关于ArrayList与LinkedList添加数据的效率问题
- ArrayList与LinkedList的普通for循环遍历效率对比
- ArrayList 与 LinkedList的插入效率实践分析
- LinkedList,ArrayList末尾插入谁效率高?
- LinkedList,ArrayList末尾插入谁效率高?
- ArrayList和LinkedList存取效率分析
- ArrayList与linkedlist插入效率分析
- Java中ArrayList和LinkedList效率
- ArrayList,LinkedList的区别
- javamail例子
- Spring中的设计模式
- ASIHTTPRequest 断点续传
- 重新设置Eclipse的Workspace默认路径
- 正则表达式语法
- 浅析ArrayList,LinkedList的执行效率
- Tomcat 生产服务器性能优化
- c宏定义的一些写法符号
- 单链表的归并排序
- R语言与数据的预处理
- Oracl中index by binary_integer的作用
- java web导出excel并下载
- 类的多态性的概念
- Jqgrid中使用日期控件datepicker遇到的问题小结