- 数组
- 链表,一种递归的数据结构
- 栈 后进先出 ,先进后出的原则来存储数据
- 队列
- 树 是由n(n>0)个有限节点组成的一个具有层次关系的集合
- 堆
- 图
- 哈希表
数组:
优点:1、按照索引查询元素的速度很快。
2、按照索引遍历数组也很方便。
缺点:1、数组的大小在创建后就确定了,无法扩容。
2、数组只能存储一种类型的数据。
添加、删除元素的操作很耗时间,因为要移动其他元素。
链表
《链表是一种递归结构,它或者为空(null),或者是指向一个结点(node)的引用,该节点还有一个元素和一个指向另一条链表的引用》。
这是一种双向链表,当前元素item既有prev又有next,不过first的prev为null,Last的next为null.如果是单向链表的话,就只有next,没有prev.
单向链表的缺点是只能从头到尾依次遍历,而双向链表可进可退,既能找到下一个,也能找到上一个—每个节点上都需要多分配一个存储空间。
链表中的的数据按照“链式”的结构存储,因此可以达到内存上非连续的效果,数组必须是一块连续的内存。
由于不必按照顺序的方式存储,链表在插入、删除的时候可以达到O(1)的时间复杂度(只需要重新指向引用即可,不需要像数组那样移动其他元素)。除此之外,链表还克服了数组必须预先知道数据大小的缺点。,从而可以实现灵活的内存动态管理。
优点:
- 不需要初始化容量
- 可以添加任意元素
- 插入和删除的时候只需要更新引用。
缺点:
- 含有大量的引用,占用的内存空间大。
- 查找元素需要遍历整个链表,耗时。
栈
栈就像水桶一样,底部是密封的,顶部是开口,水可以进可以出。先进去的水在桶的底部,后进去的水在桶的顶部:后进去的水后被倒进来。
后进先出、先进后出的原则来存储数据。
队列
队列就好像水管一样,两端都是开口的,水从一端进去,然后从另外一端出来。先进去的水先出来,后进去的水后出来。
和水管不同:队列会对两端进行定义,一端叫队头,另外一端叫队尾。队头只允许删除操作(出队),队尾只允许插入操作(入队)。
树
树是一种典型的非线性结构,它是由n(n>0)个有限节点组成的一个具有层次关系的集合。
堆
堆可以被看做是一颗树的数组对象,具有以下特点:
- 堆中某个节点的值总是不大于或不小于其父节点的值
- 堆总是一课完全二叉树
图
哈希表
也叫散列表。是一种可以通过关键码值(key-value)直接访问的数据结构,它最大的特点是可以快速实现查找、插入和删除。
哈希表完美结合了数组和链表的优点。JAVA的HASHMap在此基础上还计入了树的优点。