java - 二叉堆类构造函数

标签 java arrays

谁能解释一下 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/

相关文章:

python - 如何根据 Pyspark 中数组列中的值创建新列

c++ - (概念)使用指针遍历整数数组

java - 为什么 BigDecimal ("5.50")不等于 BigDecimal ("5.5")以及如何解决这个问题?

java - map 中 HashMap 的 ImmutableMap.of() 解决方法?

java - 如何从一台服务器更新另一台服务器中的表

java - 如何使用 Jackson 解析对象数组?

java - 将数组添加到 ArrayList

javascript - 按字符串属性值对对象数组进行排序

java - 在数组范围外编辑数组

java - 替换字符串的所有字母减去 Java 中的第一个和最后一个