通用数据结构:
1.数组
分类:
无序数组,有序数组
特点:
一般针对数据量较小且数据可预知的情况,创建时指定大小,不利于扩展;在内存中预留一块连续的区域,内存空置率高利用率较低;无序数组插入较快,有序数组查询较快,利用下标访问,随机访问性强。
优点:
查询速度快
随机访问性强,遍历数组方便
缺点:
内存固定,扩展性差
数组要预留空间,内存利用率低
插入删除速度慢
只能存储一种类型的数据
2.链表的特点:
分类:
单链表、双向链表以及循环链表
特点:
创建时不指定大小,内存大小随数据量变化;内存的存储位置可以在任何地方,不要求连续,可扩展性强;每一个数据保存邻近的数据的地址,遍历需要从根节点开始,没有随机访问性,查找效率低;增加删除比较随意,效率高。
优点:
插入删除速度快
内存利用率高,不浪费内存
存储的数据类型相对灵活
大小不固定,扩展性强
缺点:
查询速度慢
只能从根节点开始查找,不具备随机访问性
3.二叉查找树
分类:
平衡二叉树,非平衡二叉树
特点:
结合数组和链表的优点,适合数据量较大的情况,具有一定顺序,左子节点值较小,右子节点值较大;查找时从根节点开始,不具备随机访问性,但相比较而言查询速度快,增删速度快,对于遍历一定范围内的数据比较方便。非平衡二叉树简单,但对于部分数据查询增删效率较低,甚至会退化成链表。
优点:
查询增删速度快
存储的数据类型相对灵活
不指定内存大小,内存利用率较高
缺点:
只能从根节点开始查询,不具备随机访问性
对于部分数据,给平衡二叉树的效率会向链表结构靠拢
4.平衡树
实现:
AVL树、红黑树、2-3树等
特点:
改善了二叉搜索树的缺点,实现起来稍微复杂,平衡树结构会产生了额外消费,但查询及增删效率均比较高
优点:
查询速度较快
增删速度较快
存储的数据类型相对灵活
不指定内存大小,内存利用率较高
缺点:
实现起来复杂
会产生一定的额外消费
5.哈希表
实现方式:
开放地址法、链地址法
优点:
插入删除速度最快
缺点:
基于数组,创建后扩展性差
弱序,查找速度慢
基于哈希映射,会有冲突产生,并形成数据聚集
需预留内存,内存利用率不高
通用数据存储结构的速度
参考资料 《java数据机构和算法》