コードでは、文字列のストリームが与えられており、ストリーム中のk個の最長文字列を返しています。私の質問は、コンパレータはどのように機能するのですか?私は、無名関数を使って2つの文字列の長さを比較するcompareメソッドをオーバーライドすることを理解していますが、この比較によってどのようにminヒープが作成されますか?ミニヒープはどのように作成されますか?
public static List<String> topK(int k, Iterator<String> iter) {
PriorityQueue<String> minHeap = new PriorityQueue<>(k, new Comparator<String>() {
public int compare(String s1, String s2) {
return Integer.compare(s1.length(), s2.length());
}
});
while (iter.hasNext()) {
minHeap.add(iter.next());
if (minHeap.size() > k) {
// Remove the shortest string. Note that the comparison function above
// will order the strings by length.
minHeap.poll();
}
}
return new ArrayList<>(minHeap);
}
PriorityQueueのjavadocを読んだことがありますか? https://docs.oracle.com/javase/9/docs/api/java/util/PriorityQueue.html –
あなたが求めていることを理解することは難しいです。 「この比較がどのように最小ヒープを作成するのか」という質問は非センシティブです。比較*はminヒープを作成しません。 'PriorityQueue'コードは、ヒープ内の項目を順序付けるために提供したコンパレータを使用して、最小ヒープを作成します。あなたの質問を明確にしてください。 –