[英]Java collection lookup by a key, sort by a value
我在Java中有一個帶有字符串鍵和浮點數的結構。 我想將它們存儲在一個集合中,在該集合中我可以通過鍵進行簡單查找,或者“彈出”得分最低的項目。
我該怎么辦?
您需要兩個集合/數據結構。 我建議使用自定義對象:
public class GiveMeANamePlease implements Comparable<GiveMeANamePlease>{
private final String key;
private final float score;
// add constructor, getter, compareTo, equals and hashcode
}
您可以使用HashMap<String, GiveMeANamePlease>
進行鍵查找,並使用TreeSet<GiveMeANamePlease>
進行得分排序。
您可以像這樣彈出TreeSet中的最低元素:
treeSet.remove(treeSet.first());
並不是那么好,因為它需要雙重查找(效率低並且不是線程安全的)。
提示:如果只想彈出最小值,將分數存儲在Min-Heap中會更有效,但是沒有標准的Java實現。
根據您的分數,使您的結構實現可比性,並使用映射按鍵存儲實例,並使用SortedSet保持按分數排序實例。
據我所知,沒有一個具有這種可操作性的Collection類型。
為了存儲,我將使用地圖。 對於最低/最高分數,我將獲取地圖的EntrySet並將其用於創建第二個Collection,該Collection按值對條目進行排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.