0.基本数据结构
按逻辑结构分(画图表示其元素之间逻辑关系)
1.线性表
1.0按物理存储结构1.1相邻 1.2不一定相邻
1.1顺序表
数组(一维,二维)
1.2链表
对应Java容器的ArrayList和LinkedList
1.0按操作特性分(以下存储均可选1.1、1.2的一种)
1.3栈(先进后出,后进先出)
1.4队列(先进先出)
队列:一般队列,双端队列,限制双端队列(还可细分,有的退化为栈)
2.非线性表
2.0按有无环(树、森林其实也是图的大类,只不过因为树用的多单独分类)
2.1树,森林
2.2图
图也可以是矩阵的一种,有的不行(因为太多null);类键-值对,但是一个键也是其他键的值。
可分点集和边集
边集:可邻接矩阵,可邻接表;可十字链表,可多重邻接表
2.2.0按有无方向分
2.2.1无向图
有环
连通图
连通分量
2.2.2有向图
有环
强连通图
强连通分量
无环
DAG(有向无环图)--可拓扑排序的要求
带权无环
一般的
AOE网(要求同一起点,同一个终点)----用于流程分析与安排
0.1查找的结构
存储结构决定
1.顺序查找
2.链式查找
3.分块查找(也叫索引顺序查找)
(1.和2.结合,块间顺序)
逻辑结构
4.B树(多路平衡查找树)
5.B+树(多路平衡查找树,且值都在叶子也有,且链式连接了)
6.散列表(邻接表)
我的理解
散列函数对应的值=对应的hashcode
拉链法解释,为什么有hashcode相等
Java数据结构
容器Collection Collections
线性表list,队列queue,集合set
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
HashMap是Java程序员使用最频繁的的用于键值对(key value)数据处理的容器,在JDK1.7(Java Developmet Kit)时HashMap采取的是数组+链表的形式存储数据,JDK1.8对HashMap进行了存储结构上的优化,引入了红黑树数据结构,极大的增强了HashMap的存取性能!为什么会引入红黑树呢?因为HashMap存在一个问题,即使负载因子和Hash算法设计的再合理,也无法避免出现在链表上拉链过长的问题,如果极端情况下出现严重的Hash冲突,会严重影响HashMap的存取性能,于是HashMap在jdk1.8时,引入了红黑树,利用红黑树快速增删改查的特点来优化了HashMap的性能!