数据结构分类
数据结构包括:线性结构和非线性结构。
线性结构:
1、线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系。
2、线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构。顺序存储的线性表称为顺序表,顺序表中存储的元素是连续的。
链式存储的线性表称为链表,链表中存储的元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息。
3、线性结构常见的有:数组、队列、链表和栈。
非线性结构:
包括:二维数组、多维数组、广义表、树结构和图结构。
hashcode和equals的区别和联系
1、如果两个对象hashcode相等,不一定equals。
2、如果两个对象hashcode不相等,一定不equals。
3、如果两个对象equals,hashcode一定相等。
4、如果两个对象不equals,hashcode有可能相等。
二叉搜索树
特征:
1、节点的左子树只包含小于当前根节点的数。
2、节点的右子树只包含大于当前根节点的数。
3、所有左子树和右子树自身必须也是二叉搜索树。
4、时间复杂度 logn。
缺点:
使用第一次添加的节点作为根节点,如果后面添加的值都大于根节点的值则会造成链表的情况。
红黑树
特征:
1、是平衡二叉树的一个子集。
2、每个节点不是红色就是黑色。
3、不能有两个连在一起的红色节点。
4、根节点都是黑色。
5、新增节点默认为红色。
6、每个红色节点的两个子节点都是黑色。
B-Tree
特征:
1、所有节点索引元素不重复。
2、节点大小默认16kb。
3、节点存储key是索引,value是整行数据。
4、节点中的索引从左到右递增排列。
B+Tree
特征:
1、叶子节点包含所有索引字段。
2、节点大小默认16kb。
3、非叶子节点不存储data,只存储冗余索引,可以放更多的索引。
4、叶子节点用指针连接,提高区间访问的性能。
为什么InnoDB表必须有主键,并且推荐使用整型的自增主键?
如果节点存储满了,自增的会在节点后面添加,如果不是则可能会在中间添加,导致节点分裂和树的平衡。