谁能解释一下 BinaryHeap 构造函数吗? (见下面的java代码) 我不明白以下几行:
- 数组 = (AnyType[]) new Comparable[ ( currentSize + 2 ) * 11/10 ];
for(任何类型项目:项目) 数组[ 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( ); }
...
}
最佳答案
看起来像你的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++
在每个循环上引发.
关于java - 二叉堆类构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16931371/