在Matlab中使用Java PriorityQueue

时间:2011-03-28 03:30:39

标签: java matlab priority-queue

我需要在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发帖,我发现我需要提供比较器功能,但我不知道该怎么做。

2 个答案:

答案 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]