嘗試按升序對陣列 0f 日志版本進行排序。我可以通過直接將 Comparator 實作為
Arrays.sort(input, new CustomComparator())
并在 CustomComparator 類中撰寫與以下代碼(來自 Parse 類)相同的邏輯。但是,當我嘗試通過在佇列中添加值對其進行排序時,排序不起作用。
import java.util.*;
public class LogSorting {
public static void main(String[] args) {
String[] input = {"2.10.0", "1.0.100", "1.0.1", "1.1.100", "2.1.10", "1.1.1"};
PriorityQueue<Parse> str = new PriorityQueue<>();
for (String i : input) {
String[] result = i.split("\\.");
str.add(new Parse(Integer.parseInt(result[0]), Integer.parseInt(result[1]), Integer.parseInt(result[2])));
}
for (Parse p : str) {
System.out.println(p.major " " p.minor " " p.patch);
}
}
}
class Parse implements Comparable<Parse> {
int major;
int minor;
int patch;
Parse(int major, int minor, int patch) {
this.major = major;
this.minor = minor;
this.patch = patch;
}
public int compareTo(Parse p) {
if (major == p.major && minor == p.minor)
return Integer.compare(patch, p.patch);
if (major == p.major)
return Integer.compare(minor, p.minor);
return Integer.compare(major, p.major);
}
}
輸出
1 0 1
1 1 100
1 0 100
2 10 0
2 1 10
1 1 1
輸出應排序為 1 0 1, 1 0 100, 1 1 1, 1 1 100, 2 1 10, 2 10 0
uj5u.com熱心網友回復:
它不是一個排序陣列,因此您可以只從一個元素到一個優先級較低的元素。方法 iterator() 中提供的迭代器不能保證以任何特定順序遍歷 PriorityQueue 的元素。如果您需要有序遍歷,請考慮使用
Arrays.sort(pq.toArray()).
或者你可以
while (!str.isEmpty()) {
Parse p = str.peek();
str.remove();
System.out.println(p.major " " p.minor " " p.patch);
}
但這會清空佇列。
我現在知道你為什么要使用優先佇列。如果您只想排序串列,請使用串列,然后使用可比較/比較器對串列進行排序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/405606.html
標籤:
