我正在学习数据结构课程,我们正在使用 Mark Weiss 编写的 Java 2nd Edition 中的数据结构和算法分析。在他的 BinaryHeap 实现中,他的构造函数创建了一个转换为 AnyType[] 的 Comparable[] 数组。你知道他为什么这样做而不是仅仅创建一个新的 AnyType[] 吗?
我了解 BinaryHeap 的结构,但我想跟上泛型的速度。类声明很简单,确保 AnyType 扩展了与 AnyType 或 AnyType 继承层次结构上的任何超类可比较的类型(如果 AnyType 是类型的子类并且不需要更改其 compareTo 方法即可运行)。
但是,这行 ,array = (AnyType[]) new Comparable[ capacity + 1 ];
对我来说毫无意义。AnyType 不是已经是 Comparable 了吗?仅仅写作有什么后果array = new AnyType[ capacity + 1 ];
?
完整的课程资源可以在他的网站上找到,但这里是我关心的部分:
public class BinaryHeap<AnyType extends Comparable<? super AnyType>>
{
private int currentSize; // Number of elements in heap
private AnyType [ ] array; // The heap array
/**
* Construct the binary heap.
* @param capacity the capacity of the binary heap.
*/
public BinaryHeap( int capacity )
{
currentSize = 0;
array = (AnyType[]) new Comparable[ capacity + 1 ];
}