Java集合(六)--ArrayList、LinkedList和Vector对比
在前两篇博客,学习了ArrayList和LinkedList的源码,地址在这:
Java集合(四)--基于JDK1.8的ArrayList源码解读
这篇文章,对比一下ArrayList和LinkedList和Vector,主要是前面两个,因为Vector很少使用,如果考虑并发安全,也会使用
CopyOnWriteArrayList
ArrayList和LinkedList的对比:插入、修改、删除、遍历
顺序插入add(Object):
1、ArrayList效率无疑是最好的,elementData[size++] = e;
2、LinkedList相对而言略逊一筹,因为需要new Node(),如果对象比较大的时候,效率相对而言还是低的
非顺序插入add(index, Object):
1、ArrayList通过System.arraycopy()方法,把index后面的所有数据都前移一位,如果数据量多,你还要插入到首位,是不是要绝望了。。。
2、LinkedList无论插入到任何位置,只需要通过index找到node节点(这个过程使用二分法,越靠近中间的数据,效率越低),改变前后指向关系即可
我想,非顺序插入LinkedList效率无疑更好一点,但如果插入的index很靠近尾部,ArrayList肯定更好一点,因为前移的数据量很少了
修改set(index, object):
1、ArrayList得到index对应value,直接替换即可
2、LinkedList的消耗还是来自于通过index寻找节点的过程
ArrayList更好一点
删除remove(int):
1、ArrayList还是需要把index后面的所有数据都前移一位
2、LinkedList的消耗还是来自于通过index寻找节点的过程
删除remove(Object):
1、ArrayList首先遍历得到Object对应的index,然后把index后面的所有数据都前移一位
2、LinkedList首先遍历得到Object对应的index,然后直接改变前后指向关系即可
for循环:
1、ArrayList使用普通for循环效率最高,而且foreach循环效率没有很大
2、LinkedList使用Iterator效率最好,普通for循环在大数据量的情况,慢的令人发指
ArrayList使用for循环和LinkedList使用Iterator进行遍历,前者效率稍高
综上:
ArrayList适合顺序插入或者靠近尾部的插入,修改,而且可能发生扩容,效率会降低
LinkedList适合非顺序插入,特别是靠近两端的位置,但是如果很靠近尾部,ArrayList的效率不会比LinkedList低,没有扩容的概念
删除方面:
ArrayList寻址比较快,而数据迁移效率比较低
LinkedList寻址比较慢,但是只需要改变前后指向关系
至于修改:
肯定是ArrayList效率更高的
Java集合(六)--ArrayList、LinkedList和Vector对比的更多相关文章
- Javase之集合体系(2)之List及其子类ArrayList,LinkedList与Vector及其迭代器知识
集合体系之List及其子类ArrayList,LinkedList与Vector及其迭代器知识 List(接口) 特点:有序(存储与取出顺序相同),可重复 List子类特点: ArrayList: ...
- Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- Java集合框架之LinkedList浅析
Java集合框架之LinkedList浅析 一.LinkedList综述: 1.1LinkedList简介 同ArrayList一样,位于java.util包下的LinkedList是Java集合框架 ...
- java集合系列之LinkedList源码分析
java集合系列之LinkedList源码分析 LinkedList数据结构简介 LinkedList底层是通过双端双向链表实现的,其基本数据结构如下,每一个节点类为Node对象,每个Node节点包含 ...
- 从源码看Java集合之ArrayList
Java集合之ArrayList - 吃透增删查改 从源码看初始化以及增删查改,学习ArrayList. 先来看下ArrayList定义的几个属性: private static final int ...
- java集合(ArrayList,Vector,LinkedList,HashSet,TreeSet的功能详解)
说起集合,我们会潜意识里想到另外一个与之相近的名词——数组,OK!两者确实有相似之处,但也正是这点才是我们应该注意的地方,下面简单列出了两者的区别(具体功能的不同学习这篇文章后就会明白了): 数组 长 ...
- java 集合之ArrayList、Vector、LinkedList、CopyOnWriteArrayList
ArrayList 线程不安全. 底层Object[]数组实现,用transient关键字修饰,防止序列化,然后重写了readObject和writeObject方法,为了提高传输效率. 插入时会判断 ...
- List集合与Set集合(ArrayList,LinkedList,Vector,HashSet,LinkedHashSet,可变参数)
List集合介绍及常用方法 import java.util.ArrayList; import java.util.Iterator; import java.util.List; /* java. ...
- Java集合之ArrayList和LinkedList的实现原理以及Iterator详解
ArrayList实现可变数组的原理: 当元素超出数组内容,会产生一个新数组,将原来数组的数据复制到新数组中,再将新的元素添加到新数组中. ArrayList:是按照原数组的50%来延长,构造一个初始 ...
随机推荐
- bzoj3998
后缀自动机+dp 想了挺长时间 后缀自动机的状态图是一个dag,从root走到一个点的路径数代表了这个状态包含的子串,我们先预处理出来每个节点向后走能够形成多少子串,注意这里不是直接在parent树上 ...
- Codechef LOCAUG17
做完题目很少有写题解的习惯,强行PO一组吧. 比赛链接:https://www.codechef.com/LOCAUG17 PRINCESS 给定字符串s,问s是否存在长度大于1的回文子串. 解:分两 ...
- ORACLE PL/SQL 实例精解之第一章 PL/SQL概念
1.传统一层一层传数据,而PLSQL作为独立的单元返回客户端,减少查询,减少网路传输的往返,高效 2.PL/SQL语句块 分为两种:命名(子程序,函数,包保存在数据库中,后期可以根据名称进行引用),匿 ...
- SCUT - 254 - 欧洲爆破 - 概率dp - 状压dp
https://scut.online/p/254 思路很清晰,写起来很恶心. #include<bits/stdc++.h> using namespace std; #define l ...
- hdoj1074【A的无比爆炸】
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊,一开始我就不知道怎么写,然后看了题解是状压DP,后来去看了看状压DP也就这样嘛,但是难点,可以说是不熟悉的地方吧...如下: 第一.我们能很快的知道状压DP的原理: ...
- bzoj 5210: 最大连通子块和【动态dp+树剖+线段树+堆】
参考:https://www.cnblogs.com/CQzhangyu/p/8632904.html 要开longlong的 首先看dp,设f[u]为必选u点的子树内最大联通块,p[u]为不一定选u ...
- 莫队初探(不带修/例题极少)By cellur925
因为今天考到莫队裸题了嘤嘤嘤...而我这样的蒟蒻肯定不会这样的高端算法啊QAQ.于是暴力水了40分qwq. 正如上文所说,我实在太菜了,于是学习莫队也只是学习了最简单的不带修普通莫队,如果我能苟到省选 ...
- 51Nod 1013 3的幂的和(快速幂+逆元)
#include <iostream> #include <algorithm> #include <string> #define MOD 1000000007 ...
- 解决error while loading shared libraries
ldd print shared library dependencies.可以查看哪些库没有找到. 这个进程启动失败,使用ldd命令可以发现是因为memcache库没有发现.把该so文件放入/lib ...
- [已读]响应式web设计实践
薄的一本,彩印,书质量和内容都不错. 响应设计三要素:媒体查询.流动布局.自适应图片.