JAVA集合一:ArrayList和LinkedList

参考链接:

HOW2J.CN

前言

这几篇博客重点记录JAVA的几个重要的集合框架:ArrayList、LinkedList、HashMap、HashTable和HashSet。主要从ArrayList和LinkedList、HashMap和HashTable的区别,以及各集合框架的使用等方面进行记录。本篇博客介绍ArrayList和LinkedList的使用和区别。

ArrayList和LinkedList的区别和使用

ArrayList实现了List接口,以下是它的主要方法:

常用方法 用途
add 在当前顺序表末尾插入一个元素
insert 在当前顺序表中插入一个元素
remove 删除指定元素
indexOf 获取某个元素的下标
size 获取顺序表的大小
contains 判断是否存在某个元素
get 获取指定下标的元素
set 替换指定下标的元素
clear 清除顺序表所有元素
addAll 将另一个容器的所有元素添加进来
toArray 将顺序表转化为数组

LinkedList同样实现了List接口, add,remove,contains 等方法同样可以使用。除此之外,它还实现了Deque接口(双向链表)和Queue接口(队列),以下是它区别于ArrayList的特殊的方法:

特殊方法 用途
addLast 在末尾插入元素
addFirst 在首部插入元素
getFirst 获取首部元素
getLast 获取尾部元素
removeFirst 删除首部元素
removeLast 删除尾部元素
offer 元素进入队列尾部
poll 从队列首部取出一个元素
peek 查看队列第一个元素(不取出)

ArrayList就是数据结构中学习的顺序表,查询方便,增删较慢

LinkedList就是数据结构中学习的链表,查询较慢,增删很快

以下是how2j网站对两种数据结构的示意图:

接下来我们用代码来展示两者的区别:

//向ArrayList和LinkedList最前面添加10000个数据package blog;import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;public class Main {public static void main(String[] args) {List<Integer> arr = new ArrayList<Integer>();//顺序表List<Integer> link = new LinkedList<Integer>();//链表insertFirst(arr, "顺序表");insertFirst(link, "链表");}  //在线性表头部插入10000个数据,计算耗时public static void insertFirst(List list, String name) {int num = 10000;int data = 1;long start = System.currentTimeMillis();//获取开始时间for(int i = 0; i < num; i++) {list.add(0,data);}long end = System.currentTimeMillis();//获取结束时间System.out.format("在%s头部插入10000个数据,耗时 %d ms\n", name,(end-start));}
}

运行结果如下(链表耗时更少,因为头部基本不需要定位,只需要增删):

在顺序表头部插入10000个数据,耗时 15 ms
在链表头部插入10000个数据,耗时 2 ms

//ArrayList和LinkedList查询某个元素耗时
package blog;import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;public class Main {public static void main(String[] args) {List<Integer> arr = new ArrayList<Integer>();//顺序表List<Integer> link = new LinkedList<Integer>();//链表getIndex(arr, "顺序表", 500000);getIndex(link, "链表", 500000);}  //在线性表获取第index位的数据,计算耗时public static void getIndex(List<Integer> list, String name, int index) {int num = 1000000;   for(int i = 0; i < num; i++) {list.add(i);}long start = System.currentTimeMillis();//获取开始时间int target = list.get(index);//查询元素下标long end = System.currentTimeMillis();//获取结束时间System.out.format("在%s中寻找下标为  %d 的数据,耗时 %d ms\n", name,target,(end-start));}
}

结果如下(当表中数据极大时,链表查询缓慢的多):

在顺序表中寻找下标为 500000 的数据,耗时 0 ms
在链表中寻找下标为 500000 的数据,耗时 5 ms

JAVA集合一:ArrayList和LinkedList相关推荐

  1. 深入理解java中的ArrayList和LinkedList

    杂谈最基本数据结构--"线性表": 表结构是一种最基本的数据结构,最常见的实现是数组,几乎在每个程序每一种开发语言中都提供了数组这个顺序存储的线性表结构实现. 什么是线性表? 由0 ...

  2. Java集合:ArrayList和LinkedList区别?

    ArrayList和LinkedList的大致区别如下: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.  2.对于随机访问get和set,ArrayL ...

  3. 【java学习】Arraylist和LinkedList使用场景与性能对比

    介绍 ArrayList LinkedList 使用场景对比 两个实例: 二分查找 插入元素 总结 介绍 List 的三个子类的特点: ArrayList 底层结构是数组,底层查询快,增删慢. Lin ...

  4. 【Java 集合】ArrayList、LinkedList、Stack、Queue、Set、Map, 迭代器 Iterable、Iterator,Collections类

    集合类型 数组的局限性 ArrayList(常用方法 + 基本使用) ArrayList - retainAll ArrayList - toArray ArrayList 的遍历(5种) Array ...

  5. java面试题 Arraylist 与 LinkedList比较

    是否保证线程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全: 底层数据结构: Arraylist 底层使用的是Object数组:LinkedList 底层使用 ...

  6. JAVA手写ArrayList以及LinkedList

    手写记录一下~ 顶级接口List public interface List<E> {//返回线性表的大小public int getSize();//判断线性表中是否为空public b ...

  7. 14 Java集合(集合框架+泛型+ArrayList类+LinkedList类+Vector类+HashSet类等)

    本篇主要是集合框架基础和List集合,Map集合等等后续更 集合 14.1 集合框架 14.1.1 概念 14.1.2 集合架构 14.2 Collection接口 14.2.1 常用方法 14.3 ...

  8. java arraylist和list_Java中ArrayList和LinkedList区别

    原文链接:http://pengcqu.iteye.com/blog/502676 一般大家都知道ArrayList和LinkedList的大致区别: 1.ArrayList是实现了基于动态数组的数据 ...

  9. java什么时候用list_Java快问快答:用 ArrayList 还是 LinkedList?

    问题: 通常我会这么定义列表: List names = new ArrayList<>() names类型使用List接口,那么具体实现该如何选择. 什么时候应该用LinkedList替 ...

最新文章

  1. H.265 HD 和H.265 4K Video Encoder IP Core
  2. 如何解决diff: /../Podfile.lock: No such file or directory 的问题
  3. 命令行里给个注释,AI就能自动生成代码
  4. mysql 树表查询所有子节点
  5. [P2387魔法森林
  6. NOVO Nordisk IT SOP List
  7. jQuery就业课程之表单选择器系列
  8. node deno_Deno手册:带有代码示例的TypeScript运行时教程
  9. Python中定时任务框架APScheduler的快速入门指南
  10. 【Android UI设计与开发】第04期:引导界面(四)仿人人网V5.9.2最新版引导界面...
  11. Linux 服务器上安装 ANSYS Fluent 2020R2
  12. 计算机桌面桌面设置动态视频教程,电脑怎么设置动态桌面?电脑设置动态视频桌面教程...
  13. 汇编语言转c语言的软件,Arm汇编转换器下载
  14. 数据库事物,隔离级别慢慢深入
  15. 阿里云Centos8 yum报错Failed to synchronize cache for repo ‘BaseOS‘解决方案,通过换文件的方式来解决。
  16. 用WIN汇编开发桌面报时工具
  17. PHP+ajaxfileupload 实现用户头像上传
  18. 【《Real-Time Rendering 3rd》 提炼总结】(十一) 第十四章 : 游戏开发中的渲染加速算法总结
  19. 论文阅读 2021——SUNet: Symmetric Undistortion Network for Rolling Shutter Correction
  20. spring报错ava.lang.NoClassDefFoundError:

热门文章

  1. java控制台五子棋游戏
  2. python安卓下载-QPython - Python for Android
  3. 从零开始学习python编程-从0开始的Python学习014面向对象编程(推荐)
  4. python画超长图-Python 拼接多张尺寸大小不一样的图片制作长图
  5. python 菜鸟-Python3 面向对象
  6. python必备基础代码-Python初学者必会的3款代码编辑器
  7. 百度阿里腾讯杀入语音识别,这家公司靠什么对抗巨头
  8. 英文语音识别_英文语音识别软件_英文语音识别翻译 - 云+社区 - 腾讯云
  9. c 语言 封装dll_C#封装YOLOv4算法进行目标检测
  10. elementui时间线的使用~满满的干货,不要错过