文字列のリストを取り込んで、キーと値を含む優先度キューに追加しようとしています。キーは単語であり、値は単語の文字列値です。次に、最初に文字列値が最も高いキューを並べ替える必要があります。優先キューでは、2つの値を追加できません。
public static List<String> pQSortStrings(List<String> strings) {
PriorityQueue<String, Integer> q = new PriorityQueue<>();
for (int x = 0; x < strings.size(); x++) {
q.add(strings.get(x),calculateStringValue(strings.get(x)));
}
return strings;
}
PriorityQueue
各ノードに単一のオブジェクトを格納できます。ですから、あなたがやろうとしていることは、そのままではできません。
ただし、両方のオブジェクトを1つのクラスで構成してから、PriorityQueue
を使用できます。
Comparator
を指定するか、 Comparable
インターフェイスを実装して 自然順序付け に依存する必要があります。
String
とint
をメンバーとするクラスを作成します。
public class Entry {
private String key;
private int value;
// Constructors, getters etc.
}
Comparable
インターフェースを実装し、比較をString
に委任します。
public class Entry implements Comparable<Entry> {
private String key;
private int value;
public Entry(String key, int value) {
this.key = key;
this.value = value;
}
// getters
@Override
public int compareTo(Entry other) {
return this.getKey().compareTo(other.getKey());
}
}
このクラスを使用してPriorityQueue
を構築します。
PriorityQueue<Entry> q = new PriorityQueue<>();
次のように要素を追加します。
q.add(new Entry(strings.get(x), calculateStringValue(strings.get(x))));
お役に立てれば。
Java-8の使用
PriorityQueue<Map.Entry<String, Integer>> queue = new PriorityQueue<>((a, b)->b.getValue()-a.getValue());
新しいエントリを追加するには
queue.offer(new AbstractMap.SimpleEntry<>("A", 10));