0

誰でも BinaryHeap コンストラクターを説明できますか? (以下の Java コードを参照) 次の行がわかりません。

  • array = (AnyType[]) new Comparable[ ( currentSize + 2 ) * 11 / 10 ];
  • for( AnyType アイテム : アイテム) 配列[ i++ ] = アイテム;

    public BinaryHeap( AnyType [ ] items ) {
        currentSize = items.length;
        array = (AnyType[]) new Comparable[ ( currentSize + 2 ) * 11 / 10 ];
    
        int i = 1;
        for( AnyType item : items )
            array[ i++ ] = item;
        buildHeap( );
    }
    

    ...

    }

4

2 に答える 2

1

あなたのBinaryHeapクラスは、BinaryHeap<AnyClass extends Comparable<AnyClass>>または同様のものとして定義されているようです。したがって、あなたの問題はjava のジェネリックを理解することです。すでにこれを知っていれば、ロケット科学ではありません。数式を適用してComparable、配列パラメーターよりも大きなサイズの配列を作成します。items次に、AnyClass[]生成された配列にキャストを適用します。

注: ジェネリックの配列を作成する例:

public class Foo<T> {
    private T[] array;
    private int size = 10;
    public Foo() {
        //line below commented since it generates "generic array creation" compile error
        //array = new T[size];
        //instead, this works without problems
        array = (T[]) new Object[size];
    }
}

この場合、(コメントに基づいて)AnyType既に拡張されているため、 の配列を作成してから にキャストしても安全です。Comparable<? super AnyType>ComparableAnyType[]

ここforに示すループは、拡張された for ループです。このforループは ( common のように) インデックス値を処理しないため、プログラマはこれを使用する前for(int i = 0; ...)にインデックスを宣言して初期化し、内部で使用して、各ループで を使用して raisesの値を保証します。iforii++

于 2013-06-05T04:11:04.597 に答える
1
1.    array = (AnyType[]) new Comparable[ ( currentSize + 2 ) * 11 / 10 ];

size でnewComparable[]が作成されます( currentSize + 2 ) * 11 / 10。次に、型にキャスト(AntType[])され、変数に割り当てられますarray

2. for( AnyType item : items) array[ i++ ] = item;

は、具体的にはfor-eachfor( AnyType item : items)の省略形です。を繰り返し、各要素をtypeの変数に割り当てます。次に、その要素をat インデックスに割り当てます(インクリメントしながら)。foritemsitemAnyTypearrayi++i

于 2013-06-05T04:11:27.800 に答える