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中创建一个通用数组?