1、概述
堆是一种经过排序的树形数据结构,每个节点都有一个值,通常我们所说的堆的数据结构是指二叉树。所以堆在数据结构中通常可以被看做是一棵树的数组对象。而且堆需要满足一下两个性质: (1)堆中某个节点的值总是不大于或不小于其父节点的值; (2)堆总是一棵完全二叉树。
2、堆数据结构的应用
TreeSet集合底层采用的就是二叉树(更具体来说TreeSet集合底层采用的是红黑树,红黑树是二叉树的一种,具有自平衡的优点)
二叉树的数据结构图
TreeSet集合存储数据的代码演示
代码语言:javascript复制//创建集合对象
TreeSet<Integer> ts = new TreeSet<Integer>();
//往集合添加元素
//20,18,23,22,17,24,19,18,24
ts.add(20);
ts.add(18);
ts.add(23);
ts.add(22);
ts.add(17);
ts.add(24);
ts.add(19);
ts.add(18);
ts.add(24);
//遍历
for(Integer i:ts){
System.out.println(i);
}
//结果:17 18 19 20 22 23 24
元素是如何存储进TreeSet集合中去的
(1)第一个元素存储的时候,直接作为根节点存储
(2)从第二个元素开始,每个元素从根节点开始比较
大:就作为右孩子
小:就作为左孩子
相等:就不搭理它
元素是如何从TreeSet集合中取出来的
从根节点开始,按照左、中、右的原则依次取出元素
结果如下: