Я беру курс по структурам данных, и мы используем анализ структур данных и алгоритмов в Java 2nd Edition от Марка Вайса. В его реализации BinaryHeap его конструктор создает массив Comparable [], который приводится к AnyType []. У вас есть идея, почему он делает это вместо того, чтобы просто создать новый AnyType []?
Я понимаю структуру BinaryHeap, но я хочу быть в курсе дженериков. Объявление класса достаточно простое, убедитесь, что AnyType расширяет тип, который сопоставим с AnyType или любым суперклассом, до иерархии наследования AnyType (в случае, если AnyType является подклассом типа и ему не требуется изменять свой метод CompareTo для функционирования ).
Однако, строка, array = (AnyType[]) new Comparable[ capacity + 1 ];
, не имеет смысла для меня. Разве AnyType уже не является сопоставимым? Какие последствия есть только для написания 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 ];
}