数组:线性 连续内存空间 相同数据类型
逻辑结构 物理结构
数组下标=索引 a[0]
高效随机访问获取 低效插入和删除
多次删除(只标记)统一执行 垃圾箱删除的道理
数组 容器类 ArrayList vector
容器中元素添加 获取
Object[] 数组 构造
扩容机制 原有容量的1.5倍
链表:非连续 非顺序
插入和删除元素非常方便,查找麻烦
结点:element 数据域(数据元素) 指针域next(下一个元素的指针,引用,最后一个是null)
零散的内存块
链表类型:单 循环 双向 双向循环
单:头结点 尾结点
循环:尾next指向头data
双向:prev data next 两个指针+1数据。支持双向遍历。应用例子:hashmap
双向循环:
数组和链表比较: 存储结构比较
随机访问效率高 查找数组快
链表动态扩容好 插入删除元素快 LinkedList
思路:1.定义结点;2.使用结点表示链表
E item;
Node<E> next;
Node<E> prev;
node(index).item
get 链表查找 一分为2查,双向链表,从前往后查,从后往前查
ArrayList基于数组。LinkedList基于双向链表
查找
插入和删除
LinkedList更占内存,除了存储数据,还要有2个引用,一个指向前一个元素,一个指向后一个元素
例子:反转单链表
栈stack 数据结构: 实现 应用 吐
ArrayStack 入栈push; 出栈pop
顺序栈:基于数组
链式栈:基于链表
栈 扩容2倍
整数integer.MAX_VALUE-8
boolean
队列: 数据结构 FIFO
概念 常见队列 实现 火车站买票 拉
队列头 队列尾
操作:入队列enqueue. 出队列dequeue
应用:缓存 循环并发队列 消息通信 公平锁
顺序队列:基于数组 ArrayQueue
head指针 tail指针
动态扩容机制(入队列)
队列实现:基于单链表
添加和删除元素操作
应用:CPU 请求处理 队列 拒绝请求
循环队列