最近在刷链表题目遇到的
java
版本常用的数据结构整理了一下
作者:变优秀的小白
Github:关注YX-XiaoBai
爱好:Americano More Ice !
QQ学习交流群(new): 811792998
先上图解,各种实现类
List概括
-
List 是一个接口,它继承于Collection的接口。它代表着有序的队列。
-
AbstractList 是一个抽象类,它继承于AbstractCollection。AbstractList实现List接口中除size()、get(int location)之外的函数。
-
AbstractSequentialList 是一个抽象类,它继承于AbstractList。AbstractSequentialList 实现了“链表中,根据index索引值操作链表的全部函数”。
-
ArrayList, LinkedList, Vector, Stack是List的4个实现类。
ArrayList 是一个数组队列,相当于动态数组。它由数组实现,随机访问效率高,随机插入、随机删除效率低。
LinkedList 是一个双向链表。它也可以被当作堆栈、队列或双端队列进行操作。LinkedList随机访问效率低,但随机插入、随机删除效率低。
Vector 是矢量队列,和ArrayList一样,它也是一个动态数组,由数组实现。但是ArrayList是非线程安全的,而Vector是线程安全的。
Stack 是栈,它继承于Vector。它的特性是:先进后出(FILO, First In Last Out)。
LinkedList
-
LinkedList 继承了 AbstractSequentialList 类。
-
LinkedList 实现了 Queue 接口,可作为队列使用。
-
LinkedList 实现了 List 接口,可进行列表的相关操作。
-
LinkedList 实现了 Deque 接口,可作为队列使用。
-
LinkedList 实现了 Cloneable 接口,可实现克隆。
-
LinkedList 实现了 java.io.Serializable 接口,即可支持序列化,能通过序列化去传输。
Set、HashSet、TreeSet区别
Set
: 一个通用的组值集合
HashSet
: 一个无序的元素集合,HashSet
是Set
的一个实现TreeSet
: 一个有序的元素集合,TreeSet
是Set
的一个实现
通常上HashSet
比TreeSet
会快很多。
TreeSet
通常用于实现一个红黑树HashSet
通常配合Object.hashCode
创建一个索引数组
Queue与Deque区别
同
均是: FIFO
异
Queue
是单端队列Deque
是双端队列,可以在首尾插入或删除元素
总结: 而由于双端队列的定义,Deque
可以作为栈或者队列使用,而Queue
只能作为队列或者依赖于子类的实现作为堆使用。