一、LinkedList 概述

  java.util.LinkedList  集合数据存储的结构是链表结构

  特点:增删快,查询慢

  LinkedList 是一个双向链表,如下图

  

  注意:该集合实现不是同步的,多线程的,速度快,效率高。

  扩展:LinkedList 集合也作为堆栈,队列的结构使用。

二、LinkedList 的结构

  LinkedList:双向链表结构(双向链表、队列、栈、双端队列、单向链表等各种数据结构的效果)

  LinkedList 内部有一个结点的类型:

  

  其中还有两个 Node 类型的变量 first与 last,分别来记录第一个结点的地址与最后一个结点的地址。

  思考:LinkedList 为什么可以被当做双向链表、栈、队列、双端队列等数据结构使用?

  1、如何体现双向链表的?

    LinkedList 中提供了大量首尾操作的方法:

void addFirst(E e) :将指定元素插入此列表的开头
void addLast(E e):将指定元素添加到此列表的结尾
E getFirst():返回此列表的第一个元素。
E getLast():返回此列表的最后一个元素
boolean offer(E e):将指定元素添加到此列表的末尾(最后一个元素)。
boolean offerFirst(E e) :在此列表的开头插入指定的元素。
boolean offerLast(E e):在此列表末尾插入指定的元素
int indexOf(Object o):返回此列表中首次出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。
int lastIndexOf(Object o):返回此列表中最后出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1
E get(int index) :返回此列表中指定位置处的元素。

  

  2、如何体现栈的?

    主要提供了操作栈常用方法:

 void push(E e) :将元素推入此列表所表示的堆栈
E peek():获取但不移除此列表的头(第一个元素)。
E peekFirst():获取但不移除此列表的第一个元素;如果此列表为空,则返回 null。
E peekLast():获取但不移除此列表的最后一个元素;如果此列表为空,则返回 null
E pop() :从此列表所表示的堆栈处弹出一个元素

  3、如何体现队列的?(实现了Queue接口)

  抛出异常 返回特殊值
插入 add(e) offer(e)
移除 remove() poll()
检查 element() peek()

  4、如何体现双端队列?(JDK1.6才支持,实现了Deque(double ended queue(双端队列)))

    下表总结了12种方法

  第一个元素(头部) 最后一个元素(尾部)
  抛出异常 特殊值 抛出异常 特殊值
插入 addFirst(e) offerFirst(e) addLast(e) offerLast(e)
移除 removeFirst() pollFirst() removeLast() pollLast()
检查 getFirst() peekFirst() getLast() peekLast()

三、常用方法

  1、构造方法

LinkedList() :构造一个空列表。
LinkedList(Collection<? extends E> c) :构造一个包含指定 collection 中的元素的列表,这些元素按其 collection 的迭代器返回的顺序排列。

      源码跟踪:

  可以看出,无参的构造方法什么都没做。

  2、add(Object obj) 方法

   源码跟踪:

  解读:

  3、remove(Object obj) 方法

    源码跟踪:

  解读:

  4、getFirst() 方法

    源码跟踪:

  

Java 之 LinkedList 集合的更多相关文章

  1. 在C语言中模仿java的LinkedList集合的使用(不要错过哦)

    在C语言中,多个数据的储存通常会用到数组.但是C语言的数组有个缺陷,就是固定长度,超过数组的最大长度就会溢出.怎样实现N个数储存起来而不被溢出呢. 学过java的都知道,java.util包里有一个L ...

  2. Java学习:集合双列Map

    数据结构 数据结构: 数据结构_栈:先进后出 入口和出口在同一侧 数据结构_队列:先进先出 入口和出口在集合的两侧 数据结构_数组: 查询快:数组的地址是连续的,我们通过数组的首地址可以找到数组,通过 ...

  3. Java:LinkedList类小记

    Java:LinkedList类小记 对 Java 中的 LinkedList类,做一个微不足道的小小小小记 概述 java.util.LinkedList 集合数据存储的结构是循环双向链表结构.方便 ...

  4. java基础30 List集合下的LinkedList集合

    单例集合体系: ---------| collection  单例集合的根接口--------------| List  如果实现了list接口的集合类,具备的特点:有序,可重复       注:集合 ...

  5. Java基础之 集合体系结构(Collection、List、ArrayList、LinkedList、Vector)

    Java基础之 集合体系结构详细笔记(Collection.List.ArrayList.LinkedList.Vector) 集合是JavaSE的重要组成部分,其与数据结构的知识密切相联,集合体系就 ...

  6. Java中的集合Queue、LinkedList、PriorityQueue(四)

    Queue接口 Queue用于模拟了队列这种数据结构,队列通常是指“先进先出”(FIFO)的容器.队列的头部保存在队列中时间最长的元素,队列的尾部保存在队列中时间最短的元素.新元素插入(offer)到 ...

  7. Java学习之集合(LinkedList链表集合)

    一.什么是链表集合,通过图形来看,比如33只知道它下一个是55 如果:现在要删除33的话,就是把55赋值给45,这样看它操作集合速度会非常快. 二.LinkedList特有方法 1.添加 addFir ...

  8. Java—增强for循环与for循环的区别/泛型通配符/LinkedList集合

    增强for循环 增强for循环是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的. 它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作. ...

  9. Java基础之集合框架——使用真的的链表LinkedList<>(TryPolyLine)

    控制台程序. public class Point { // Create a point from its coordinates public Point(double xVal, double ...

随机推荐

  1. contact form 7如何搭配Akismet过滤垃圾邮件

    contact form 7有很多站长在用,但是经常会有一些垃圾邮件进来,如何过滤呢?两个方法:1.表单提交启用验证码功能,很多垃圾邮件是用软件扫相应的端口,然后批量群发,如果用验证码了可以过滤很大一 ...

  2. keil中使用——变参数宏__VA_ARGS__

    本文说的__VA_ARGS__,就是一个可变参数宏,与printf中可变参数的宏定义一个道理,是新C99规范中增加的. __VA_ARGS__详情内容 1.关于__VA_ARGS__ __VA_ARG ...

  3. 装ubuntu的坑

    装ubuntu安装盘的U盘,在BOOT中会出现两种载入方式,切记不要用UEFI方式打开,否则安装ubuntu会在最后卡在GRUB的安装上面,然后失败.

  4. 阿里巴巴java开发手册 注释规约

  5. 列表:list

    #_*_coding:utf-8_*_#作者:王佃元#日期:2019/12/7'''数据类型整数字符串列表.元组name = 'wuchao'name = 'jinxin'name = 'xiaohu ...

  6. notapad++正则替换

    1.替换小数点后一位 XP_001663106.2XP_001662510.3XP_001655249.2XP_001655248.1NP_001165739.1 \.[0-9]或者\.\d #第一个 ...

  7. Android 开发基础入门篇: 生成带有签名的apk安装包

    说明: 软件默认生成的安装包没有签名,现在手机安装APP的时候要求,安装包必须有签名才可以 默认生成的APK位置 现在生成带有签名的APK 我一般放到当前工程根目录,然后文件名字 key 有些时候需要 ...

  8. nginx设置防盗链

    1.一般的防盗链设置: location ~* \.(gif|jpg|png|jpeg)$ { expires 30d; valid_referers none blocke *.julyy.site ...

  9. mysql(三)索引

    参考文档:索引的基本操作 & 简单优化:https://www.cnblogs.com/zz-tt/p/6609828.html聚簇索引vs非聚簇索引:https://www.cnblogs. ...

  10. SpringMVC拦截器与SpringBoot自定义拦截器

    首先我们先回顾一下传统拦截器的写法: 第一步创建一个类实现HandlerInterceptor接口,重写接口的方法. 第二步在XML中进行如下配置,就可以实现自定义拦截器了 SpringBoot实现自 ...