Java数据结构之堆结构,基于泛型类中泛型数组的创建

首先创建Node类型作为堆的元素类型

堆结构的元素必须能够比较,定义Node类的比较器

首先明确,在Java里面要创建泛型数组需要借助import java.lang.reflect.Array;

创建类HeapExample1,其构造函数之一为:

其中this.heap是T[]类型,创建泛型数组的方法是(T[]) Array.newInstance(type, DEFAULT_CAPACITY);

其中type应为Node.class,DEFAULT_CAPACIT是数组长度。事实上这句话的意思就是this.heap = new T[DEFAULT_CAPACITY];然而这么做是会报错的,Java不允许通过new关键字创建泛型数组,具体原因可以百度。

不过数组长度不代表数组的元素个数,数组长度是底层数组长度,如果不够需要扩容,而元素个数为private int heapLength;。和栈结构类同,除了确定长度的底层数组之外(如果不够再扩容),还定义了栈指针表示栈的高度,用于判断是否为空,或者是否溢出。

堆结构的基本操作为插入,删除,返回元素个数,判断是否为空。还有自上而下调整和自下而上调整。插入和删除的过程中,通过调整操作来保证堆结构始终有序,事实上堆结构也是优先队列的基础。

堆结构的完整代码为:

结果:

大顶堆
堆的内容:
2, 3, 27, 15, 44, 38, 36, 47, 26,

按顺序输出:
(value:2, 9)
(value:3, 0)
(value:15, 5)
(value:26, 7)
(value:27, 8)
(value:36, 6)
(value:38, 2)
(value:44, 1)
(value:47, 4)

Original: https://www.cnblogs.com/zhaoke271828/p/14521954.html
Author: Viktor_Cullen
Title: Java数据结构之堆结构,基于泛型类中泛型数组的创建

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/566035/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球