0

谁能解释 BinaryHeap 构造函数?(见下面的java代码)我不明白以下几行:

  • 数组 = (AnyType[]) new Comparable[ ( currentSize + 2 ) * 11 / 10 ];
  • for( AnyType item : items) array[ i++ ] = item;

    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>(基于注释),因此创建一个数组Comparable然后将其转换为AnyType[].

这里显示的for循环是增强的 for 循环。由于此for循环不处理索引值(如在 common 中for(int i = 0; ...)),程序员i在使用 this 之前声明并初始化索引for,然后在内部使用它,通过 using 确保i每个循环上 raises的值i++

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

Comparable[]使用 size 创建一个新的( currentSize + 2 ) * 11 / 10。然后将其转换为 type(AntType[])并分配给 variable array

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

for( AnyType item : items)只是 的简写for,特别是for-each。它迭代items,将每个元素分配给itemtype的变量AnyType。然后它将该元素分配给arrayat 索引i++(同时递增i)。

于 2013-06-05T04:11:27.800 回答