数据结构与算法(Java 语言描述)【五】
特点:
常用数据结构
哈希表
特点:
一般没有容量限制,是通过对Key的哈希计算快速存储和访问指定的内容
因为一般的哈希算法是把任意长度的值,生成指定长度的Key,可能会存在哈希碰撞问题
碰到哈希碰撞时,会通过一个链表来存储具有相同哈希值Key的数据
为了提高哈希表的访问效率,当某个哈希值的相同Key过多,比如超过8个,会使用红黑树进行存储,性能更好
具体如下图

逻辑结构:根据关键码(Key)和值(Value)进行访问的数据结构
物理结构:通过对Key进行一个哈希算法映射到一个指定位置,这样就能很快在哈希表中找到对应元素;物理结构上结合了数组和链表进行存储
优点:插入、删除、查询都一个字,快
缺点:结构略复杂,对初学者不友好
Java语言中的定义如下 Map<Integer,String> data = new HashMap<>();
详细示例见附件中的HashMapDemo.java
树
特点:
由1~n个有限节点组成的一种层次化的数据结构,有唯一一个根节点
称之为树,是因为其结构像一颗倒挂的树,也就是根朝上,叶子朝下
每个节点有0~n个子节点
没有父结点的叫根节点
没有子节点的叫叶子节点
具体如下图,分别为树、二叉树、满二叉树

逻辑结构:由1~n个有限节点组成的一种层次化的数据结构
物理结构:常用的存储方式有双亲表示法(顺序存储)、孩子表示法(链表存储)、孩子兄弟表示法(链表存储)
优点:是一种相对有用的折中数据结构,其插入、删除元素很快,在查找方面也有很多的算法优化;其中二叉树既有链表的优点,也有数组的特性,是两者的优化方案,在处理大批量的动态数据方面非常有用
缺点:学习稍复杂
扩展:基于二叉树,还有很多扩展的应用,如平衡二叉树、红黑树、B+树等
Java语言中一般没有直接操作树,但有一些集合类是基于树实现的;像TreeMap和TreeSet都是基于红黑树实现的,本身也是一个二叉树
堆
特点:
是用数组实现的二叉树,没有像树一样的指针域
根据"堆属性"来进行排序
主要的应用有:构建优先队列、支持堆排序、快速找出一个集合中的最大值或最小值
Java语言中没有对堆的直接操作,在应用中使用也比较少
图
特点:
是离散数学的概念,是一些顶点的集合,并且顶点使用边连接起来,边还可以有权重
广泛应用于如工作任务分解、列车运行图等方面
在一个图确定后,可以使用广度优先搜索和深度优先搜索来查找两个顶点间的路径
常见的场景如下图的城市关系图

Java语言中没有对图的直接操作,在应用中使用需要自己构建相应数据结构
【备注:部分图片来自网络】
来源:testingpai