【发布时间】:2011-03-28 03:30:39
【问题描述】:
我在 Matlab 中需要一个最小堆,并且我正在尝试使用 Java 的 PriorityQueue。我被困在如何提供比较器上。 到目前为止,我已经初始化了 PriorityQueue 并且可以向其中添加一对值索引:
>> q = java.util.PriorityQueue
q =
[]
>> q.add({1,3})
ans =
1
当我尝试添加更多数据时出现问题:
>> q.add({2,4})
??? Java exception occurred:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to java.lang.Comparable
at java.util.PriorityQueue.siftUpComparable(Unknown Source)
at java.util.PriorityQueue.siftUp(Unknown Source)
at java.util.PriorityQueue.offer(Unknown Source)
at java.util.PriorityQueue.add(Unknown Source)
从this 的帖子中,我看到我需要提供一个 Comparator 函数,但我不知道该怎么做。
【问题讨论】:
-
我怀疑你必须用Java编写比较器函数并单独编译。
-
是的,看起来就是这样做的。我对 Java 不是很流利,所以我一直在寻找其他解决方案,并在文件交换 (mathworks.com/matlabcentral/fileexchange/…) 上找到了一个符合我需要的条目,尽管如果尝试从空队列中推送某些内容,它会相当不优雅地崩溃。
标签: java matlab priority-queue