我目前正在为一个班级构建一棵霍夫曼树。在查看了我的可用选项后,我决定采用优先队列方法。但是,当我尝试运行以下代码时,我在 TreeNode 上(在第一 pq.offer 行)上得到一个 ClassCastException。
public static TreeNode<CharFreq> buildTree(ArrayList<TreeNode<CharFreq>> trees) throws IOException {
PriorityQueue<TreeNode<CharFreq>> pq = new PriorityQueue<TreeNode<CharFreq>>();
for (int i = 0; i < trees.size(); i++) {
if (trees.get(i).getItem().getFreq() > 0) {
pq.offer(new TreeNode<CharFreq>(new CharFreq(trees.get(i).getItem().getChar(), trees.get(i).getItem().getFreq())));
}
}
while (pq.size() > 1) {
TreeNode<CharFreq> leftNode = pq.poll();
TreeNode<CharFreq> rightNode = pq.poll();
TreeNode<CharFreq> parentNode = new TreeNode<CharFreq>(new CharFreq('\u0000', ((leftNode.getItem().getFreq()) + (rightNode.getItem().getFreq()))), leftNode, rightNode);
}
return pq.poll();
}
我知道它不是一个可比较的类,但是 CharFreq 是,我的问题是我是否能够修复我的代码,从而避免这个转换问题?