我在java中有一个带有字符串键和浮点数的结构。我想将这些存储在一个集合中,我可以通过键进行简单的查找,或者一个" pop"得分最低的项目。
我怎么能这样做?
答案 0 :(得分:2)
您需要两个集合/数据结构。 我建议使用自定义对象:
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实现。
答案 1 :(得分:1)
根据您的分数使您的结构实现可比较,并使用地图按键存储实例,并使用SortedSet保持按分数排序的实例。
答案 2 :(得分:0)
在我的知识中没有单一的Collection类型具有该功能。
对于存储,我会使用Map。对于最低/最高分,我会获得地图的EntrySet并使用它来创建第二个Collection,它按值对条目进行排序。