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 函数,但我不知道如何做到这一点。
优先级队列需要包含实现 Comparable 的对象,或者需要在构造时传入 Comparator 函数。
目前,MATLAB 中无法使用 MATLAB 代码实现 Java 接口,也无法提供文字 Java 代码。
因此,您必须遵循@nibot的建议并制作一个包含实现比较器的类的小.jar文件。