按其值的大小排序哈希映射。 java的

时间:2015-01-25 12:45:41

标签: java sorting hashmap

此哈希映射将名为Sentence的字符串对象用作键,这是程序中无法更改的重要部分。数据应该根据相应值的大小进行组织,这是一个整数,最大值先下降到最小值,1是最小界限,每个分区排序并不重要。使用此代码可以实现这一目标吗?

//map to store learned 'rules'
Map<Sentence, Integer> ruleCount = new HashMap<>();
//store data
public void numberRules(Sentence sentence) 
{
    if (!ruleCount.containsKey(sentence))
    {
        ruleCount.put(sentence, 0);
    }
    ruleCount.put(sentence, ruleCount.get(sentence) + 1);
}

2 个答案:

答案 0 :(得分:4)

HashMap没有订单。有分类的地图,但它们按键排序,而不是值。只需在完成修改后将地图转换为List,然后对列表进行排序:

List<Map.Entry<Sentence, Integer>> entries = new ArrayList<>(ruleCount.entrySet());
Collections.sort(entries, new Comparator<Map.Entry<Sentence, Integer>>() {
    @Override
    public int compare(Map.Entry<Sentence, Integer> e1, Map.Entry<Sentence, Integer> e2) {
        return e1.getValue().compareTo(e2.getValue());
    }
});

答案 1 :(得分:0)

你不能用(仅)一张地图来做这件事。地图不按价值排序。

一种可能的解决方案是将地图的条目复制到数组中,然后对数组进行排序。但如果你需要反复排序,那就太贵了。

另一种方法是创建(实际上)Map<Sentence, Record>TreeSet<Record>相结合的数据结构。 Record具有可变int计数字段和不可变Sentence字段。 TreeSet按计数排序,当您更新计数时,您需要删除并重新插入Record