一、基础:
1、四种存储结构及其特点
1)顺序存储:开辟连续的一段存储空间来存储数据
逻辑上相邻的元素物理上也相邻
有序
存储密度大
支持随机存取
在数组间增删不方便
2)链式存储:每个元素由数据域+指针组成,不需连续空间
逻辑上相邻的元素物理上不一定相邻
有序
存储密度小
(单链表) 不支持随机存取,取某个元素要遍历该元素前所有数据
在给定元素后增删元素方便
3)索引存储:建立索引表存储结点地址
检索快
费空间(因为建立索引表)
4)散列存储:(key,value)键值对,存在函数关系key=Hash(value),当多个value对应一个key时就产生了冲突
是数组的扩展,但更快,通过给定的值进行运算就能算出key在数组中的位置,从而找到该值的位置。复杂度是O(1)
2、红黑树
我们知道红黑树是一种平衡二叉树,它可在 O(logN) 时间内完成查找、增加、删除等操作。然后通过一系列的性质定义实现自平衡。
1)平衡二叉树,每个节点的深度之差的绝对值不超过 1,通过左旋、右旋保持平衡。
2)红黑树的性质:
节点是红色或黑色。
根是黑色。
所有叶子都是黑色(叶子是NIL节点)。
每个红色节点必须有两个黑色的子节点。(从每个叶子到根的所有路径上不能有两个连续的红色节点。)
从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点(简称黑高)。
红黑树详细学习(这个网址讲的还挺详细的):https://zhuanlan.zhihu.com/p/91960960
二、集合结构
1、概述
1)数组用于存放基本数据类型的数据,集合用来存放对象(而且集合可存放长度不同、类型不同的元素)
2)List、Set、Map都是接口,List、Set继承自Collection,Map是独立接口
3)实现:
- List:ArryList、LinkList、Vector
- Set:HashSet、TreeSet、LinkedHashSet
- Map:HashTable、HashMap、LinkedHashMap、WeakHashMap
网上截的图,具体的继承与实现关系,实现继承、虚线实现。(这个要记熟,我们知道实现时可以增加或重写方法,所以数据结构要对具体的实现类进行分析)
2、集合的底层数据结构及特性
1)List:有序、可重复
- ArryList
底层结构是数组,查询快,增删慢
线程不安全
- LinkList
底层结构是链表,查找慢,增删快
线程不安全
- Vector:已经被取代了
底层结构是数组,查询快,增删慢
线程安全
2)Set
- HashSet:无序、不可重复
底层结构是Hash表,哈希表的实现也是:数组+链表\红黑树,数组存储hash值,再指向元素实际的地址,所以元素重复hash值相同会导致冲突
set在调用方法是,会有hashCode()和equals()两个方法保证元素的不可重复性
- LinkedHashSet:有序,不允许重复
链表 + Hash表
LinkedHashSet继承自HashSet,但多了一层链表,用以记录元素的存储顺序,但它是hash表,依然不允许重复。
- TreeSet
红黑树
3)Map:一个元素包含 <key ,value>键值对,其中key唯一,key与value一一对应。
- HashMap:无序、key不允许重复,值可以
底层结构是Hash表
线程不安全,效率高
- LinkedHashMap:有序、key不允许重复,值可以
Hash表+链表:
LinkedHashMap继承自HashMap,但多了一层链表,用以记录元素的存储顺序。
- HashTable:无序
底层结构是Hash表
键值与Value都不允许为null,同步的(线程安全)·