数据结构和java容器实现小结

依然范特西╮ 提交于 2020-01-31 21:26:25

数组

连续分配的内存块

  • 一维数组
  • 多维数组
  • 自动扩容功能

链表

分散分配的内存块

  • 单链表
  • 双向链表
  • 循环链表
    • 单向循环链表
    • 双向循环链表
队列 (链表的子集)

先进先出视为队列,队列的功能可以被链表覆盖。

  • 单向先进先出队列
  • 双线先进先出队列
  • 循环队列(仅数组实现)
  • 优先级队列 (使用堆实现)
栈 (链表的子集)

先进后出视为栈
同上,可以被链表覆盖

树 (链表的父级)

树的节点有一个父节点和多个子节点的数据结构。
链表是有一个父节点并且只有一个子节点的特殊的树
不同树结构的区别。

  • 有序/无序
  • 有权/无权
  • 子节点上限(2个,3个,多个等)
  • 是否自平衡(最低层和最高层层级差不超过1)

二叉树 (最多有2个子节点)

  • 完全二叉树 (只有叶子层节点不满,上层节点已满)
    • 最小/大堆
  • 满二叉树(每个节点都有2个子节点)
  • 二叉查找树(左子节点<根节点<=右子节点,有序的二叉树)
  • 平衡二叉查找树
    • 红黑树
    • AVL树

多叉树 有多个子节点

  • B树
    • B+树
    • B*树
    • B-树
  • 字典树 trie树
    • 前缀树
    • 后缀树

贴个图
百度百科 树分类

还有其他的:
BKD-树 (elasticsearch 中用于存储整数并且快速查找)

相关算法:
前/中/后序遍历

图(树的父集)

图表示节点和节点之间的关系,不限制父节点和子节点的个数
图和图的区分

  • 有向/无向
  • 有环/无环
  • 完全/不完全
  • 有权/无权

相关概念

  • 无向图
  • 有向图
  • 完全图 (节点两两之间有边相连)
  • 稠密图 (图的边比较多)
  • 稀疏图 (图的边比较少)

相关算法:

  • 搜索算法
    • 广度优先搜索 BFS
    • 深度优先搜索 DFS
    • A*启发式搜索
  • 单源最短路径算法
    • Dijkstra
    • Bellman-Ford
  • 最小生成树算法
    • Prim
    • Kruskal
  • 图匹配算法
    • 匈牙利算法
  • 网络流算法
    -最大流量算法 Ford-Fulkerson
  • 强连通分支算法
    • Kosaraju
    • Gabow
    • Tarjan

组合数据结构

多种数据结构组合形成

  1. 散列表 (数组+链表)
  2. 斐波那契堆 链表+二叉树
  3. 二项堆 (链表+二叉树)
  4. 跳表

java容器实现

java.util: 线程不安全集合

  • List 链表接口
    • LinkedList 双向链表实现
    • ArrayList 自动扩容数组实现
    • Vector 自动扩容数组实现 (线程安全 synchorized修饰)
    • Stack 栈 Vector实现
  • Queue 单向先进先出队列接口
    • PriorityQueue 数组+自动扩容+最小堆实现的优先级队列
  • Deque 双向先进先出队列接口
    • ArrayDeque 数组实现的双向队列 自动扩容+数组实现
    • LinkedList: 双向链表 可以替代 链表实现的双向队列
  • Map
    • HashMap 散列表实现,1.8以后加入了红黑树
    • Hashtable 散列表实现 (线程安全 synchorized修饰)
    • TreeMap 红黑树实现 有序
    • WeakHashMap 散列表实现
  • Set
    • HashSet HashMap实现
    • TreeSet TreeMap实现

java.util.concurrent 下面是线程安全的集合

  • List
    • CopyOnWriteArrayList
  • Set
    • CopyOnWriteArraySet CopyOnWriteArrayList 实现
    • ConcurrentSkipListSet ConcurrentSkipListMap 实现
      -Map
    • ConcurrentHashMap 锁分段+散列表实现
    • ConcurrentSkipListMap 跳表实现
  • Queue
    • LinkedBlockingQueue 单向链表实现的单向队列(指定大小)
    • ArrayBlockingQueue 自动扩容+数组实现的单向队列
    • PriorityBlockingQueue 数组+自动扩容+最小堆实现的优先级队列
  • Deque
    • ConcurrentLinkedDeque 双向链表实现的无界队列
    • LinkedBlockingDeque 双向链表实现的(指定大小)双向并发阻塞队列
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!