按密钥查找Java集合,按值排序

时间:2016-08-03 16:24:52

标签: java collections

我在java中有一个带有字符串键和浮点数的结构。我想将这些存储在一个集合中,我可以通过键进行简单的查找,或者一个" pop"得分最低的项目。

我怎么能这样做?

3 个答案:

答案 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,它按值对条目进行排序。