1. 概述
上文我们讲到TOP K问题最小堆的实现,采用的比较基本数据类型int。这里我们将扩展到比较对象
2. 代码实现
这里我们直接上代码,这里的扩展最小堆我们取名为ExMinHeap,实现如下
package org.cyxl.common;
/**
* 扩展最小堆,采用泛型,存储的对象必须实现Comparable接口
*
* Created by jeff on 16/5/11.
*/
public class ExMinHeap<T extends Comparable>
{
// 堆的存储结构 - 数组(这里为Object数组,数组中的具体类型为T)
private Object[] data;
/**
* 初始化堆的大小
* @param k
*/
public ExMinHeap(int k)
{
this.data = new Object[k];
}
/**
* 调整堆为最小堆, 比较时很重要的一点null为最小
*
* @param i
*/
private void adjustHeap(int i)
{
// 获取左右结点的数组下标
int l = left(i);
int r = right(i);
// 这是一个临时变量,表示 跟结点、左结点、右结点中最小的值的结点的下标
int smallest = i;
// 存在左结点,且左结点的值小于根结点的值
T parent = (T)data[i];
if (l