私はデータ構造コースを受講しており、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 ];
}