Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按哈希映射的大小排序';s的价值观。JAVA_Java_Sorting_Hashmap - Fatal编程技术网

按哈希映射的大小排序';s的价值观。JAVA

按哈希映射的大小排序';s的价值观。JAVA,java,sorting,hashmap,Java,Sorting,Hashmap,这个哈希映射使用一个名为句子的字符串对象作为键,它是程序的一个重要部分,不能更改。数据应该根据相应值的大小进行组织,该值是一个整数,最大值排在第一位,降到最小值,1是最小界限,每个分区之间的顺序并不重要。使用此代码可以实现这一点吗 //map to store learned 'rules' Map<Sentence, Integer> ruleCount = new HashMap<>(); //store data public void numberRules(Se

这个哈希映射使用一个名为句子的字符串对象作为键,它是程序的一个重要部分,不能更改。数据应该根据相应值的大小进行组织,该值是一个整数,最大值排在第一位,降到最小值,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);
}
//映射到存储已学习的“规则”
Map ruleCount=新建HashMap();
//存储数据
公共无效数(句)
{
如果(!ruleCount.containsKey(句子))
{
规则计数。put(句子,0);
}
ruleCount.put(句子,ruleCount.get(句子)+1);
}

哈希映射没有顺序。有排序的贴图,但它们是按键排序的,而不是按值排序的。修改完地图后,只需将其转换为列表,然后对列表进行排序:

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());
    }
});
List entries=newarraylist(ruleCount.entrySet());
Collections.sort(条目,新的Comparator(){
@凌驾
公共整数比较(Map.Entry e1,Map.Entry e2){
返回e1.getValue().compareTo(e2.getValue());
}
});

哈希映射没有顺序。有排序的贴图,但它们是按键排序的,而不是按值排序的。修改完地图后,只需将其转换为列表,然后对列表进行排序:

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());
    }
});
List entries=newarraylist(ruleCount.entrySet());
Collections.sort(条目,新的Comparator(){
@凌驾
公共整数比较(Map.Entry e1,Map.Entry e2){
返回e1.getValue().compareTo(e2.getValue());
}
});
你不能(仅仅)用地图来做这件事。地图不会按值对其条目排序

一种可能的解决方案是将映射的条目复制到数组中,然后对数组进行排序。但是,如果您需要重复排序,那么这是非常昂贵的

另一种方法是创建数据结构,即(实际上)与树集相结合的
Map
记录
有一个可变的
int
计数字段和一个不可变的
句子
字段。
TreeSet
是按计数排序的,当您更新计数时,您需要删除并重新插入
记录
,您不能(仅)使用映射来完成此操作。地图不会按值对其条目排序

一种可能的解决方案是将映射的条目复制到数组中,然后对数组进行排序。但是,如果您需要重复排序,那么这是非常昂贵的


另一种方法是创建数据结构,即(实际上)与树集相结合的
Map
记录
有一个可变的
int
计数字段和一个不可变的
句子
字段。
TreeSet
是按计数排序的,当您更新计数时,您需要删除并重新插入
记录

,然后我调用对规则计数进行比较?然后您有一个条目列表,按其值排序。你可以用这个列表做任何你想做的事情。一个条目包含作为键的句子,作为值的计数。这看起来很好,但您能帮助我理解如何打印内容,以便我能看到它的外观吗?
System.out.println(条目)。此外,List和Map.Entry是标准类,具有javadoc。阅读javadoc。这就是你学习如何使用课堂的方式,令人惊叹的谢谢你的文档。教人钓鱼!然后我调用比较规则计数?然后你有一个条目列表,按它们的值排序。你可以用这个列表做任何你想做的事情。一个条目包含作为键的句子,作为值的计数。这看起来很好,但您能帮助我理解如何打印内容,以便我能看到它的外观吗?
System.out.println(条目)。此外,List和Map.Entry是标准类,具有javadoc。阅读javadoc。这就是你学习如何使用课堂的方式,令人惊叹的谢谢你的文档。教人钓鱼!