Java 二进制堆类构造函数
有人能解释一下二进制堆构造函数吗?(参见下面的java代码) 我不明白下面几句话:Java 二进制堆类构造函数,java,arrays,Java,Arrays,有人能解释一下二进制堆构造函数吗?(参见下面的java代码) 我不明白下面几句话: 数组=(AnyType[])新的可比[(currentSize+2)*11/10] 对于(任意类型项:项) 数组[i++]=项 public BinaryHeap( AnyType [ ] items ) { currentSize = items.length; array = (AnyType[]) new Comparable[ ( currentSize + 2 ) * 11 / 10
- 数组=(AnyType[])新的可比[(currentSize+2)*11/10]李>
- 对于(任意类型项:项)
数组[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( ); }
二进制堆
类被定义为二进制堆。如果您已经知道这一点,那么就不是火箭科学:它通过应用公式创建一个比项
数组参数更大的可比
数组。然后,它对生成的数组应用对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];
}
}
公共类Foo{
私有T[]数组;
私有整数大小=10;
公共食物({
//下面的行已注释,因为它生成“通用数组创建”编译错误
//数组=新的T[大小];
//相反,这是没有问题的
数组=(T[])新对象[大小];
}
}
在这种情况下,因为AnyType
已经扩展了Comparable
创建了一个新的可比[]
,其大小为(currentSize+2)*11/10
。然后将其强制转换为类型(AntType[])
,并分配给变量数组
2. for( AnyType item : items) array[ i++ ] = item;
(AnyType item:items)
的只是的缩写,特别是一个。它迭代项
,将每个元素分配给类型为AnyType
的变量item
。然后它将该元素分配给索引i++
(同时递增i
)处的数组。另外,我不明白对于每个loop.the类是--public class BinaryHeapIs,为可比较的对象使用“new Comparable[]”构建数组是很常见的吗?@JavaOwl这是因为您无法创建泛型数组。通常,您会看到类似于T[]数组=(T[])新对象[size]代码>。在这种情况下,因为AnyType
已经扩展了Comparable,所以如果我为a构造一个数组,我需要输入“newcomparable[size]”。是吗?@JavaOwl是的,然后对type[]
应用类型转换,如上面的代码所示。对于可比较的对象,使用“new Compariable[]”构建数组是常见的吗?因此,如果我为a构建数组,我需要放置“new Compariable[size]”。是这样吗?
2. for( AnyType item : items) array[ i++ ] = item;