我需要在Matlab中使用min-heap,而我正在尝试使用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发帖,我发现我需要提供比较器功能,但我不知道该怎么做。
答案 0 :(得分:1)
优先级队列需要包含实现Comparable的对象,或者需要在构造时传入Comparator函数。
MATLAB目前还没有办法用MATLAB代码实现Java接口,或提供文字Java代码。
所以你必须遵循@nibot的建议并制作一个包含实现Comparator的类的小.jar文件。
答案 1 :(得分:0)
import java.util.*;
q = java.util.PriorityQueue();
for i=1:10
q.add(i);
end
disp(q)
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]