一、基础篇--1.2Java集合-Arraylist 与 LinkedList 区别
Arraylist 与 LinkedList 区别
结构上的区别
ArrayList底层实现基于动态数组,LinkedList底层实现基于双向链表。
性能上区别
ArrayList查询快,增删慢,LinkedList增删快,查询慢
ArrayList和LinkedList都是非线程安全的
遍历列表:
常用的遍历列表有三种方法,分别为foreach、迭代器、for循环
构造一个拥有100万数据的ArrayList和等价的LinkedList,测试结果的相对耗时如下表所示:
| List类型 | forEach | 迭代器 | for循环 |
|---|---|---|---|
| ArrayList | 110ms | 81ms | 16ms |
| LinkedList | 78ms | 15ms | 很久 |
可以看到,最简便的ForEach循环并没有很好的性能表现,综合性能不如普通的迭代器,而是用for循环通过随机访问遍历列表时,ArrayList表项很好,但是LinkedList的表现却无法让人接受,甚至没有办法等待程序的结束。这是因为对LinkedList进行随机访问时,总会进行一次列表的遍历操作。性能非常差,应避免使用。
要注意的地方
1.ArrayList是基于数组实现的,如果不指定大小,会有个默认值,当空间不足时,每次扩容1.5倍,调用System.arraycopy(),如果arrayList存储数据较大,不指定具体大小,会很影响性能。
2.LinkedList删除时候,先要遍历找到该节点,如果该节点在中间,数据量还比较大的话,性能较差。
一、基础篇--1.2Java集合-Arraylist 与 LinkedList 区别的更多相关文章
- 一、基础篇--1.2Java集合-ArrayList和Vector的区别
ArrayList和Vector的区别 ArrayList和Vector都是基于动态数组实现的. 区别 ArrayList是非线程安全的,Vector是线程安全的. Vector的方法都加了同步锁 ...
- 一、基础篇--1.2Java集合-List、Set、Map区别
List.Set.Map区别 三者关系如下: 结构特点 1.List和Set是存储单列数据集合,Map是存储键值对这样的双列数据集合: 2.List中存储的数据都是有序的,并且允许重复:Map中存储 ...
- 一、基础篇--1.2Java集合-HashMap和ConcurrentHashMap的区别【转】
http://www.importnew.com/28263.html 今天发一篇”水文”,可能很多读者都会表示不理解,不过我想把它作为并发序列文章中不可缺少的一块来介绍.本来以为花不了多少时间的,不 ...
- 一、基础篇--1.2Java集合-HashMap死循环问题
为什么HashMap会出现死循环 首先,我们知道java的HashMap不是线程安全的.多线程下应该使用ConcurrentHashMap. HashMap底层是基于动态数组和单向链表(JDK1.7, ...
- 一、基础篇--1.2Java集合-HashMap和HashSet的区别
HashMap和HashSet的区别 1.HashMap实现的是Map接口,HashSet实现的是Set接口 2.结构不一样,一个存储的是键值对,一个存储的是对象 3.HashMap存储的值可能相同 ...
- 一、基础篇--1.2Java集合-HashMap和HashTable的区别
HashMap和HashTable的区别 1.继承的父类不同,HashMap继承的是AbstractMap类,HashTable继承的是Dictionary类,不过都实现了Map.Clone.Seri ...
- 一、基础篇--1.2Java集合-HashMap源码解析
https://www.cnblogs.com/chengxiao/p/6059914.html 散列表 哈希表是根据关键码值而直接进行访问的数据结构.也就是说,它能通过把关键码值映射到表中的一个位 ...
- Java基础从数组到集合之间关键字的区别!!!!
1.&& 和 &区别和联系: 相同点 : 结果是一样的. 不同点 :如果使用双&号判断,如果说条件一为false,不会判断条件二,但是单&号会继续判 ...
- Java 集合 ArrayList和LinkedList的几种循环遍历方式及性能对比分析 [ 转载 ]
Java 集合 ArrayList和LinkedList的几种循环遍历方式及性能对比分析 @author Trinea 原文链接:http://www.trinea.cn/android/arrayl ...
随机推荐
- 第十八篇 JS传参数
JS传参数 参数,这是个什么东西呢?简单的说吧,我们去玩别人的网站,一般来个登录,有用户名和密码,当我们输入正确之后,那么这用户名和密码里面的值,就是参数的值,它将这个值传给“参数”,然后提交到后 ...
- pl_sql例题
0. 准备工作: set serveroutput on hellowrold 程序 begindbms_output.put_line('hello world');end;/ [语法格式]--de ...
- RouterOS Firewall v6 流程图
1. Firewall v5和Firewall v6对比图 2.Firewall v6的流程图
- hadoop的价值在哪里
新霸哥注意到了在移动互联网时代,很多的传统的系统架构已经不能满足现有的业务需要了,在大数据时代,我们需要新的架构才能满足海量数据处理能力. 在实际的应用中数据增长非常的迅速,数据类型也变的丰富了,业务 ...
- concurrent.futures:线程池,让你更加高效、并发的处理任务
并发任务池 concurrent.futures模块提供了使用工作线程或进程池运行任务的接口. 线程池和进程池的API是一致的,所以应用只需要做最小的修改就可以在线程和进程之间进行切换 这个模块提供了 ...
- NB-IOT双工模式
半双工(Half Duplex)数据传输指数据可以在一个信号载体的两个方向上传输,但是不能同时传输.例如,在一个局域网上使用具有半双工传输的技术,一个工作站可以在线上发送数据,然后立即在线上接收数据, ...
- 火狐插件simple timer 定时打开指定网页
今天我要介绍的是火狐浏览器一款插件:Simple Timer,该插件是火狐一个可以添加计时器和定时提醒功能插件,该插件的主要作用就是当你的设置在某一个时刻提醒时,插件会自动弹出通知,并且自动打开你想要 ...
- JAVA GUI设
1.两种设置大小的方式: //Border border1=BorderFactory.createEmptyBorder(20,20,20,20); //设置大小 panel.setB ...
- fedora 29 安装ALSA声音驱动
centos系列解决 安装utils时遇到的问题 configure: error: this packages requires a curses library yum install ncurs ...
- java——解决"java.io.StreamCorruptedException: invalid stream header: xxx"
这个错误是由序列化引起的,可能的原因以及解决方法: 1.kryo对于集合(比如 Map)的反序列化会失效,报这个错误,解决办法比较暴力,不用kryo了,直接用java原生方法. 2.使用Java原生方 ...