任何人都可以解释BinaryHeap构造函数吗? (见下面的java代码) 我不明白以下几行:
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( );
}
...
}
答案 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++
)。