L&;中堆的数组实现中出错;C';s的Java软件结构

L&;中堆的数组实现中出错;C';s的Java软件结构,java,data-structures,heap,Java,Data Structures,Heap,在Lewis和Chase的文章中,堆的数组实现适用于少量的项,但在有大量项的情况下,有时会抛出ArrayIndexOutOfBoundsException。它出现在ArrayHeap(扩展了ArrayBinaryTree)中方法heapifyRemove()的第113行 第113行: if ((tree[left] == null) && (tree[right] == null)) 似乎左撇子有时会离开数组的末尾。这怎么能解决呢 供参考: 在检查left的索引是否为null

在Lewis和Chase的文章中,堆的数组实现适用于少量的项,但在有大量项的情况下,有时会抛出ArrayIndexOutOfBoundsException。它出现在ArrayHeap(扩展了ArrayBinaryTree)中方法heapifyRemove()的第113行

第113行:

if ((tree[left] == null) && (tree[right] == null))
似乎左撇子有时会离开数组的末尾。这怎么能解决呢

供参考:


在检查left的索引是否为null之前,应该检查数组大小是否包含left(从数组的增长方式来看,它似乎总是包含left和right)。我认为这种情况应该被解释为左和右都是空的

所以代码应该是

if ((left > count) || ((tree[left] == null) && (tree[right] == null)))

非常感谢,先生。这很好用!我必须把它提交给皮尔逊图书勘误表页面。