二进制堆类构造函数

时间:2013-06-05 04:06:01

标签: java arrays

任何人都可以解释BinaryHeap构造函数吗? (见下面的java代码) 我不明白以下几行:

  • array =(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( );
    }
    

    ...

    }

2 个答案:

答案 0 :(得分:1)

您的BinaryHeap类似乎定义为BinaryHeap<AnyClass extends Comparable<AnyClass>>或类似内容。因此,您的问题是了解generics in 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循环是enhanced for loop。由于此for循环不处理索引值(如在公共for(int i = 0; ...)中),程序员在使用此i之前声明并初始化索引for然后使用它在内部,使用i确保i++的值在每个循环上引发。

答案 1 :(得分:1)

1.    array = (AnyType[]) new Comparable[ ( currentSize + 2 ) * 11 / 10 ];

创建了大小为Comparable[]的新( currentSize + 2 ) * 11 / 10。然后将其转换为(AntType[])类型并分配给变量array

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

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