以前见过很多文章说这两个东西,感觉自己还是没有深入理解,今天看了书明白一些,在此提出来和大家共同探讨:

面试的时候(基础)一般会问你使用过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的执行效率的更多相关文章

  1. ArrayList 和 LinkedList的执行效率比较

    一.概念: 一般我们都知道ArrayList* 由一个数组后推得到的 List.作为一个常规用途的对象容器使用,用于替换原先的 Vector.允许我们快速访问元素,但在从列表中部插入和删除元素时,速度 ...

  2. ArrayList和LinkedList插入删除效率的测试(完全不在一个数量级8/20)

    通过index获取元素的值 java里面的链表可以添加索引,而C中的链表,是没有索引的 package ArrayListVSLinkedList; import java.util.ArrayLis ...

  3. ArrayList LinkedList Vector

    ArrayList是基于数组实现的,没有容量的限制. 在删除元素的时候,并不会减少数组的容量大小,可以调用ArrayList的trimeToSize()来缩小数组的容量. ArrayList, Lin ...

  4. ArrayList, LinkedList, Vector - dudu:史上最详解

    ArrayList, LinkedList, Vector - dudu:史上最详解 我们来比较一下ArrayList, LinkedLIst和Vector它们之间的区别.BZ的JDK版本是1.7.0 ...

  5. Vector,ArrayList, LinkedList的区别

    1.Vector.ArrayList都是以类似数组的形式存储在内存中,LinkedList则以链表的形式进行存储. 2.List中的元素有序.允许有重复的元素,Set中的元素无序.不允许有重复元素. ...

  6. 09 Collection,Iterator,List,listIterator,Vector,ArrayList,LinkedList,泛型,增强for,可变参数,HashSet,LinkedHashSet,TreeSet

    09 Collection,Iterator,List,listIterator,Vector,ArrayList,LinkedList,泛型,增强for,可变参数,HashSet,LinkedHas ...

  7. 【java基础】java中ArrayList,LinkedList

    [一]ArrayList 一ArrayList的内部结构 (1)ArrayList内部维护的是一个Object数组 (2)ArrayList数组扩容后数组的长度的公式:旧的数组长度+(旧数组长度> ...

  8. 怎么优化JAVA程序的执行效率和性能?

    现在java程序已经够快的了,不过有时写出了的程序效率就不怎么样,很多细节值得我们注意,比如使用StringBuffer或者StringBuilder来拼接或者操作字符串就比直接使用String效率高 ...

  9. ArrayList,LinkedList的对比

    ArrayList,LinkedList都是Collection接口的通用实现方式,两者采用了不用的存储策略,用来适应不同场合的需要. 实现方式 ArrayList的内部采用集合的方式存储数据 唯一需 ...

随机推荐

  1. 九度OnlineJudge之1020:最小长方形

    题目描述:     给定一系列2维平面点的坐标(x, y),其中x和y均为整数,要求用一个最小的长方形框将所有点框在内.长方形框的边分别平行于x和y坐标轴,点落在边上也算是被框在内. 输入:      ...

  2. 浏览器打开URL的方式和加载过程

    不同浏览器的工作方式不完全一样,大体上,浏览器的核心是浏览器引擎,目前市场占有率最高的几种浏览器几乎都使用了不同的浏览器引擎:IE使用的是Trident.Firefox使用的是Gecko.Safari ...

  3. Mac上利用Eclipse编译Cocos2d-x

    目前使用较多的Cocos2d-x开发平台是XCode,应该是由于大部分Cocos2d-x开发者都是iOS开发出生.但是当我们将XCode开发的Cocos2d-x工程发布Android版本时,每次都需要 ...

  4. C语言总结之---关键字

    我记得我开始学习C语言的时候,那时候还在读高中,我们老师就把C语言的关键字,全部写在黑板上,老师说我们下面的两节课的内容就是(把它给记下来) 你还记得标准C有多少个关键字吗? 第一:关键字描述 C99 ...

  5. find-a-jar-file-given-the-class-name

    Save this as findclass.sh (or whatever), put it on your path and make it executable: #!/bin/sh find ...

  6. clear_logs.py修改

    #!/usr/bin/env python#encoding=utf-8"""清空最后修改时间跑今天7天以前的所有文件"""#指定监控的路径 ...

  7. cell中button怎么得到对应cell的indexpath 以及关于UITableViewCellContentView的问题

    ============================================================ 博文原创,转载请声明出处 电子咖啡-专注于移动互联网 ============ ...

  8. C++ 可以多个函数声明

    c/c++可以有多个函数声明,但实现只能有一个 例子: //file t_defs.h #ifndef _T_DEFS_H_ #define _T_DEFS_H_ void say(void); #e ...

  9. HDU 4296 Buildings (YY)

    题意: 给定N个物体,每个物体有两个参数w,s.   w代表它自身的重量: s代表它的强度.现在要把这些物体叠在一起,会产生一个PDV值. PDV解释:(Σwj)-si, where (Σwj) st ...

  10. 跟我一起学extjs5(11--自己定义模块的设计)

    跟我一起学extjs5(11--自己定义模块的设计)        从这一节開始我们来设计并完毕一个自己定义模块.我们先来确定一个独立的模块的所能定义的一些模块信息. 下面信息仅仅是我自己在开发过程中 ...