使用数组的Java BST迭代器



Java中二叉搜索树的类定义:

public class BST<E extends Comparable<E>> implements Iterable<E>, Cloneable
public Iterator<E> iterator() {
        return new BSTInOrderIterator();
    }
    private class BSTInOrderIterator implements Iterator<E> {
        private int sortedArrayFillerIndex;
        private final E[] sortedArray;
        private int ptr;
        public BSTInOrderIterator() {
            sortedArrayFillerIndex = 0;
            sortedArray = (E[]) (new Object[size()]);
            inOrder(root);
            ptr = 0;
        }
        private void inOrder(Node x) {
            if (x == null) return;
            inOrder(x.left);
            sortedArray[sortedArrayFillerIndex++] = x.value;
            inOrder(x.right);
        }
        @Override
        public boolean hasNext() {
            return ptr < size();
        }
        @Override
        public E next() {
            return sortedArray[ptr++];
        }
    }

在迭代器中,首先通过对BST的无序遍历构建一个排序数组。但是,我在BST迭代器的构造函数中得到了类强制转换异常。我该如何处理呢?

问题在sortedArray = (E[]) (new Object[size()]);行。不能像这样初始化泛型数组。要初始化sortedArray,请尝试如下操作:

sortedArray =(E[]) Array.newInstance(clazz, size())

请注意,您需要提供所需对象的类作为clazz

有关更多细节,请参阅此问题的答案。如何在Java中创建一个通用数组?

最新更新