今天和别人聊天时,有所感慨。 自己辛辛苦苦的学了不少东西。 但是谁又能相信我是真的学过,真的努力了呢。能拿出什么证据出来吗。
学过的东西要说的出来,证明自己是学过了的。不然你去面试的时候,跟面试官说你学了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中的全局变量
有这三个
长度,首节点,最后一个节点。
transient关键字我们也都知道,是禁止序列化的一个关键字。
然后一些构造方法和不常用的方法在这里我就不说了,大家可以自己去看。
注意:有的方法我没有写参数值
getFirst() :获取首节点
原理: 如果头节点为null会抛出NoSuchElementException,否则返回头节点自身的值
getLast() :获取尾节点
原理:如果尾节点为null,抛出NoSuchElementException异常,否则返回尾节点自身的值
removeFirst() :删除头节点
原理:
removeLast() :删除尾节点
addFirst(): 添加首节点
addLast(): 添加尾节点
contains(): 是否包含某个对象
size(): 获取集合长度
add(): 添加元素
remove(): 删除元素
addAll():添加全部集合元素
clear(): 清空集合
get(int index): 根据下标获取集合元素
set(int index, E element): 修改带下标的集合元素
add(): 添加带下标的集合元素
remove(int index): 根据下标 删除元素
大家平时在学习一些技术时,不要只停留在会用,要知其然,还要知其所以然。
希望大家多多努力,加油,机会是留给有准备的人的。