数据结构:
- 数据项
- 数据对象
- 数据结构
- 线性表
- 队列
- 堆栈
- 树 (HashMap(1.8)内置红黑树)
- 图论
- 排序和查找算法
数组
连续具有相同特征(物理地址 & 逻辑地址)
线性表
零个或多个元素的有限集合
顺序表 List
一种物理顺序和逻辑顺序一致的数据结构。 index[i] : i:下标[i] 和 capacity[i] 一致。
ArrayList结构-
ArrayList 内部是 Object[]
- arrayCopy(a,index,a,index+1,s-index)
- 扩容 capacity 有俩中,初始化,在add时候10,不够通过 newCapacity << 1
-
LinkedList 内部是 link<ET> 双项链表
链式表
物理结构上非连续的存储,因为有next指向导致逻辑顺序是线性结构。
单链表 HashMap
HashMap单链表结构
public class Node<E>{
Objet data;
Node<E> next;
}
//Add
s.next = p.next
p.next = s
//Remove
p.next = p.next.next
//Update
p.Object = new Nede
//Get
while(p.next !=null){
p=p.next
}
双链表 LinkedList
LinkedList双链表结构 public class Node<E> {
public E item;
public Node<E> next; //下个指向
public Node<E> prev; //上个指向
}
/**
* 增Node
* p - [s] - d //添加s节点。 知道P | 新增S
* 1. s.next = p.next;
* 2. p.next.prev = s
* 3. s.prev = p
* 4. p.next = s
*/
/**
*删除Node
* p - s - d //删除s节点 知道P
* 1. p.next.prev = p.prev
* 2. p.prev = p.next
*/
对比
顺序表、单链表、双链表 优缺点:
- 顺序表
- 优点:连续的存数空间,允许随机访问,末尾删插方便
- 缺点:非末尾删除、插入效率低,长度固定
- 单链表
- 优点:增删效率高于数顺序表,切长度可以随意修改
- 缺点:内存不是连续,不能随机查到需要循环
- 双链表
- 同单链表,且效率比单链表更快一些。
- List 是一个接口,它继承于Collection的接口,则代表着有序的队列。
- AbstractList 是一个抽象类,它继承于AbstractCollection 。AbstractList实现List接口中除size()、get(int location)之外的函数。
- AbstractSequentialList 是一个抽象类,它继承于AbstractList.AbstractSequentialList 实现了“链表中,根据index索引值操作链表的全部函数”
- ArrayList, LinkedList, Vector, Stack 是List的4个实现类。
缓存算法
- FIFO(First In First Out):先进先出(队列)置换算法,按照进入内存的先后顺序排成队列,从队尾进入,从队首删除。该算法会经常淘汰访问的数据。
- LRU(Least Recently Used):也就是首先淘汰最长时间未被使用的页面,可能最近也不会访问。缓存图片、分布式在广泛运用。
- LFU(Least Frequently Used):也就是淘汰一定时期内被访问次数最少的页。
网友评论