在Java中,可以通過實現Comparator接口,并在PriorityQueue的構造函數中傳入該Comparator對象來實現自定義排序。
以下是一個示例代碼,按照字符串長度進行排序:
import java.util.Comparator;
import java.util.PriorityQueue;
public class Main {
public static void main(String[] args) {
PriorityQueue<String> queue = new PriorityQueue<>(new StringLengthComparator());
queue.add("Java");
queue.add("Python");
queue.add("C++");
queue.add("Ruby");
while (!queue.isEmpty()) {
System.out.println(queue.poll());
}
}
static class StringLengthComparator implements Comparator<String> {
@Override
public int compare(String s1, String s2) {
return Integer.compare(s1.length(), s2.length());
}
}
}
輸出結果:
C++
Java
Ruby
Python
在這個示例中,我們創建了一個PriorityQueue對象,傳入了StringLengthComparator對象。StringLengthComparator實現了Comparator接口,并重寫了compare方法來定義自定義的排序邏輯,比較字符串的長度。
在PriorityQueue中,每次從隊列中取出元素時,會根據Comparator的compare方法進行比較并排序。因此,輸出結果會按照字符串的長度從小到大排序。