1.ArrayList和LinkedList区别
说⼀下ArrayList和LinkedList区别

- 具体区别
1.1. ⾸先,他们的底层数据结构不同,ArrayList底层是基于数组实现的,LinkedList底层是基于链表实现的
1.2. 由于底层数据结构不同,他们所适⽤的场景也不同,ArrayList更适合随机查找,
LinkedList更适合删除和添加,查询、添加、删除的时间复杂度不同
1.3. 另外ArrayList和LinkedList都实现了List接⼝,但是LinkedList还额外实现了Deque接⼝,所以
LinkedList还可以当做队列来使⽤
2.类结构
2.1.ArrayList实现了List接口
public class ArrayList<E> extends AbstractList<E> implements List<E>{...}
2.2.LinkedList实现了List和Deque接口,所以LinkedList可以当做双端队列来进行使用:因为Deque接口中有addFirst/addLast/getFirst/getLast等操作
public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>{...}
3.效率问题
3.1 查询:arrayList的速率会更快,因为arrayList底层是基于数组,所以获取是通过数组下标进行获取!
但是linkedList.getFirst()/getLast()速率也是很快的,因为linkedList会有两个属性专门标注第一个元素和最后一个元素
1.arrayList.get(1);
底层代码:基于下标获取
public E get(int index) {
rangeCheck(index);
return elementData(index);
}
2.linkedList.get(1);
底层代码:基于链表的操作,所以获取在底层是进行循环获取的!
public E get(int index) {
...
Node<E> x = last;
for (int i = size - 1; i > index; i--)
x = x.prev;
return x;
...
}
3.2 添加操作
1.arrayList的添加
1.1添加元素:需要考虑底层数组的扩容,效率较慢
arrayList.add(1);
1.2:在指定的位置1,添加元素1:底层涉及到数组的移动,因为1位置后的数据都得往后移动,效率较慢
arrayList.add(1,1);
2.linkedList的添加
2.1添加元素:在末尾添加元素,因为底层是链表,所以添加速度较快
linkedList.add(1);
2.2:在指定的位置1,添加元素1:因为底层是链表,需要先循环找到要添加的位置,
如果下标数字过大,等于循环次数越多,效率就会越慢
下标数字小,循环次数小,效率快!所以此处的效率是决定于插入位置的数字大小
linkedList.add(1,1);
总结:
1.arrayList:查询速率较快,但是增删效率一般!
2.linkedList:查询速率较慢,但是增删效率比arrayList快!
1.ArrayList和LinkedList区别的更多相关文章
- String[]和ArrayList和LinkedList区别
String[]和ArrayList和LinkedList区别 参考文档如下: http://www.blogjava.net/flysky19/articles/92775.html http:// ...
- 一、基础篇--1.2Java集合-Arraylist 与 LinkedList 区别
Arraylist 与 LinkedList 区别 结构上的区别 ArrayList底层实现基于动态数组,LinkedList底层实现基于双向链表. 性能上区别 ArrayList查询快,增删慢 ...
- Java中ArrayList和LinkedList区别
ArrayList和LinkedList的大致区别如下:1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问get和set,ArrayLis ...
- 简谈ArrayList和LinkedList区别
对于ArrayList和LinkedList,他们都实现了List接口,他们的区别大致为: ArrayList LinkedList (1)底层是数组,可以以O(1)的时间复杂度对元素进行随机访问 以 ...
- ArrayList和LinkedList区别
一般大家都知道ArrayList和LinkedList的大致区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问 ...
- ArrayList和LinkedList区别及性能测试
ArrayList和LinkedList是Java Lis接口的2个实现.它们的区别如下表所示: 底层结构 强项 弱项 ArrayList 数组 随机访问get和set 插入删除 LinkedList ...
- Java中ArrayList和LinkedList区别 时间复杂度 与空间复杂度
一般大家都知道ArrayList和LinkedList的大致区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问 ...
- Java中ArrayList和LinkedList区别、ArrayList和Vector的区别
一般大家都知道ArrayList和LinkedList的大致区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问get和set,Ar ...
- ArrayList和LinkedList区别(蚂蚁金服面试题)
1. 是否保证线程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全: 2. 底层数据结构: Arraylist 底层使用的是Object数组:LinkedLis ...
随机推荐
- Linux下离线安装docker与fastDFS
一.Linux下离线安装Docker 基础环境 1.操作系统:CentOS 7 2.Docker版本:docker-19.03.9.tgz 官方下载地址(打不开可能需要科学-上网) 3.官方参考文档: ...
- kafka消费组创建和删除原理
0.10.0.0版本的kafka的消费者和消费组已经不在zk上注册节点了,那么消费组是以什么形式存在的呢? 1 入口 看下kafka自带的脚本kafka-consumer-groups.sh,可见脚本 ...
- spring-boot-learning 日志相关
sprint-boot 日志 市面上的日志框架: JUL.JCL.Jboss-logging.logback.log4j.log4j2.slf4j.... SpringBoot:底层是Spring ...
- django中动态新建postgres数据库表
import psycopg2def create_new_table(table_id): conn = psycopg2.connect(database='Test', user='postgr ...
- 说说do...while和while的区别
一.do-while语句 do-while语句的语法: do{ statement }while(expression); 看下面示例: var i=10: do{ i+=2: }while(i< ...
- 什么是 REST / RESTful 以及它的用途是什么?
Representational State Transfer(REST)/ RESTful Web 服务是一种帮助计 算机系统通过 Internet 进行通信的架构风格.这使得微服务更容易理解和实现 ...
- ACM - 图论- 网络流 - 算法模板
\(EK\) 算法模板 #include <iostream> #include <queue> #include<string.h> using namespac ...
- 安装TypeScript
安装TypeScript 创建工程文件夹:mkdir <project folder> 进入工程文件夹:cd <project folder> 快速创建程序包:npm init ...
- java中抛出throw关键字是怎么用的? 举例?
5.抛出throw关键字 马克-to-win:我们先说5/0的原理,当程序运行到5/0的时候,java系统JVM会在后台new出一个除0异常实例,之后把这个实例传入catch块儿供开发者使用.马克-t ...
- MongoDB从bson文件中恢复数据
首先需要到mangodb的安装目录的bin下面找到mongorestore.exe WIN10系统MongoDB安装目录bin文件夹下没有mongorestore.exe 先下载工具 https:/ ...