在 Matlab 中使用 Java PriorityQueue

Mat*_*ter 5 java matlab priority-queue

我需要在 Matlab 中使用最小堆,并且我正在尝试使用 Java 的 PriorityQueue。我被困在如何提供比较器上。到目前为止,我已经初始化了 PriorityQueue 并且可以向它添加一对值索引:

>> q = java.util.PriorityQueue
q =
[]
>> q.add({1,3})
ans =
     1
Run Code Online (Sandbox Code Playgroud)

当我尝试添加更多数据时出现问题:

>> 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)
Run Code Online (Sandbox Code Playgroud)

这篇文章中,我看到我需要提供一个 Comparator 函数,但我不知道如何做到这一点。

Jas*_*n S 1

优先级队列需要包含实现 Comparable 的对象,或者需要在构造时传入 Comparator 函数。

目前,MATLAB 中无法使用 MATLAB 代码实现 Java 接口,也无法提供文字 Java 代码。

因此,您必须遵循@nibot的建议并制作一个包含实现比较器的类的小.jar文件。