目录
数据结构:
1,数组
2,链表
3,哈希表
4,队列
5,堆
6,栈
7,树
8,图
数据结构:
1,数组
优点:
查找元素的速度很快;
按照索引来遍历数组的速度也很快。
缺点:
数组大小无法改变,一旦创建就无法扩容;
数组只能存储一种数据类型的数据;
插入、修改、删除时比较麻烦,要移动其他的元素。
2,链表
链表是一种递归类型的数据结构,它可以为空,或者指向一个节点的引用,该节点还有另外一个元素和一个指向另外一条链表的引用。
优点:
不需要初始化容量;
可以快速的修改、删除、插入元素。
缺点:
含有大量的引用,占用的内存空间大;
查找慢。
3,哈希表
也叫做散列表,是通过K-V的形式来存储数据的。是数组和单向链表的组合,它结合了二者的优点,避免了缺点。
它的底层就是一个数组,但是数组之中的每一个元素都是一个单向链表。
map.put(k,v)
v=map.get(k)
以上两个方法的原理比较重要。
put:
首先,调用k的hashCode()方法,将hash值算出来,然后将hash值通过哈希算法将其转换为数组的下标。
如果下标处为null,那就将数据插入,如果下标不为null,将调用equals()方法,如果又返回false,将value插入到链表的末尾,如果为true,就将数据覆盖。
get:
首先,调用k的hashCode()方法,将hash值算出来,然后将hash值通过哈希算法将其转换为数组的下标。
通过下标快速定位,如果为这个位置什么都没有就返回null,如果有就调用equals(),如果链表上所有的k都为false,那就返回null,负责true,就返回出这个value。
4,队列
先进先出。
有两个端口,前面是队头(出口),后面是队尾(入口)。
队头只允许删除操作(出队),队尾只允许插入操作(入队)。
5,堆
堆可以被看做是一棵树的数组对象。
堆总是一棵完全二叉树,将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。
6,栈
先进后出。
先插入的数据被压入栈底,后插入的数据在栈顶,读出数据的时候,从栈顶开始依次读出。
7,树
是一种非线性结构,由n个有限的节点组成一个具有层次关系的集合。
每个节点都只有有限个子节点或无子节点;
没有父节点的节点称为根节点;
每一个非根节点有且只有一个父节点;
除了根节点外,每个子节点可以分为多个不相交的子树。
平衡二叉树,红黑树。
8,图
非线性结构,由顶点的有穷非空集合和顶点之间边的集合组成。
在线性结构中,数据元素之间满足唯一的线性关系,每个数据元素(除第一个和最后一个外)均有唯一的“前驱”和“后继”;
在树形结构中,数据元素之间有着明显的层次关系,并且每个数据元素只与上一层中的一个元素(父节点)及下一层的多个元素(子节点)相关;
而在图形结构中,节点之间的关系是任意的,图中任意两个数据元素之间都有可能相关。