LinkedList源码分析

今天和别人聊天时,有所感慨。 自己辛辛苦苦的学了不少东西。  但是谁又能相信我是真的学过,真的努力了呢。能拿出什么证据出来吗。

学过的东西要说的出来,证明自己是学过了的。不然你去面试的时候,跟面试官说你学了xxx技术,他会相信你说的话吗。

 

在提到LinkedList之前我们先来说说什么是集合,集合和数组之前的区别。

百度百科中说到,集合类是Java数据结构的实现。Java的集合类是java.util包中的重要内容,它允许以各种方式将元素分组,并定义了各种使这些元素更容易操作的方法。

那么集合和数组之前的区别又是什么?

1.集合的容量大小是可变的,数组的容量大小是不可变的。

2.集合存储的是引用数据类型,数组存储的是基础数据类型和引用数组类型。

3.集合的数据结构是顺序表,链表,哈希表,树等,而数组只有数据表结构

4.集合是以类的形式存在,具有封装,继承,多态等特性。而数组没有。

参考博客:https://blog.csdn.net/weixin_48512144/article/details/107289664

我们都知道java的集合有两种,一种是键值对类型,一种是非键值对类型。

也就是map类型 和list,set类型。

list和set是继承了Collection接口的,而map没有。

那么list和set有什么区别呢

list是有序的,set是无序的。list是可重复的,set是不重复的。

list又分为很多种,比如线程不安全的ArrayList,LinkedList,还有线程安全的,比如读写锁结构的CopyOnWriterArrayList和不常用的Vector等。

ArrayList属于动态数组结构,查询快,增删慢。

而LinkedList是双向链表结构,增删快,查询慢。

也就是说LinkedList不存在初始值一说。

双向链表是什么,和单向链表有什么区别?

双向链表是链表前后都可以添加元素,而单向链表只能往后添加元素

 

好像说跑题了,下面来正式说说LinkedList

我们在看一个类的源码时,首先都是要先看这个类在哪个包,继承了哪个类或者实现了哪个接口

LinkedList是支持泛型的,在java.util工具包下

继承了AbstractSequentialList类,实现了List,Aeque,Cloneable,Serializable接口

也就是说LinkedList是支持序列化的

 

我们再来看看LinkedList中的全局变量

有这三个

 

LinkedList源码分析_第1张图片


长度,首节点,最后一个节点。

transient关键字我们也都知道,是禁止序列化的一个关键字。

然后一些构造方法和不常用的方法在这里我就不说了,大家可以自己去看。

 

 

注意:有的方法我没有写参数值

 

getFirst() :获取首节点

 

原理: 如果头节点为null会抛出NoSuchElementException,否则返回头节点自身的值

LinkedList源码分析_第2张图片

getLast() :获取尾节点

原理:如果尾节点为null,抛出NoSuchElementException异常,否则返回尾节点自身的值

LinkedList源码分析_第3张图片

removeFirst() :删除头节点

原理:

LinkedList源码分析_第4张图片

removeLast() :删除尾节点

LinkedList源码分析_第5张图片
addFirst(): 添加首节点

LinkedList源码分析_第6张图片

addLast(): 添加尾节点

LinkedList源码分析_第7张图片

contains(): 是否包含某个对象

LinkedList源码分析_第8张图片

size(): 获取集合长度

LinkedList源码分析_第9张图片
add(): 添加元素

LinkedList源码分析_第10张图片

remove(): 删除元素

LinkedList源码分析_第11张图片

addAll():添加全部集合元素

LinkedList源码分析_第12张图片

clear(): 清空集合

LinkedList源码分析_第13张图片

get(int index): 根据下标获取集合元素

LinkedList源码分析_第14张图片
set(int index, E element): 修改带下标的集合元素

LinkedList源码分析_第15张图片

add(): 添加带下标的集合元素

LinkedList源码分析_第16张图片

remove(int index): 根据下标 删除元素

LinkedList源码分析_第17张图片

 

 

大家平时在学习一些技术时,不要只停留在会用,要知其然,还要知其所以然。

希望大家多多努力,加油,机会是留给有准备的人的。

 

 

 

 

 

 

你可能感兴趣的:(javase)