如何以相反的顺序打印树状图简短的回答:长答案:

2022-09-02 04:57:57

在我的作业中,我们从文件中读取文本:

成为,或不成为:这就是一个问题:
在心中是否更崇高地受苦

然后计算每个发生的时间。我已经能够打印此地图未排序,然后我能够制作一个树状图并以自然顺序打印它(如下所示)。我不知道如何以相反的顺序打印。我知道使用比较器的方法,但我有点生锈,所以我已经尽了我所能。此外,我不知道如何设置比较器以将树状图排序为相反的顺序。

以下是我打印“未排序”和“自然排序”的方法:

private static void sortPrintFrequencies(Map<String,Integer> vocabulary, PrintStream                                                  output {
Iterator iterator = vocabulary.keySet().iterator();
System.out.println("Unsorted");

while (iterator.hasNext()) {
 String key = iterator.next().toString();
 String value = vocabulary.get(key).toString();
 String times = "times.";
 String appears = "appears";

System.out.printf("%35s", key + "    " + appears + "    " + value + " "+ times);
System.out.println();
    }
System.out.println("========================================");
System.out.println("SORTED NATURALLY BY KEY");
TreeMap newVocabulary = new TreeMap(vocabulary);
Iterator iterator2 = newVocabulary.keySet().iterator();
while (iterator2.hasNext()) {
  String key = iterator2.next().toString();
  String value = newVocabulary.get(key).toString();
  String times = "times.";
  String appears = "appears";

    System.out.printf("%35s", key + "    " + appears + "    " + value + " "+ times);
    System.out.println();
}
  TreeMap revVocabulary = new TreeMap(new RevCmpKey());

  System.out.println("========================================");

}

这是我的比较器:

import java.util.*;
public class RevCmpKey implements Comparator<String> {
public int compare(String e1, String e2) {
    //compareTo in String classs
    if(e1.compareTo(e2) <1)return -1;
    if(e1.compareTo(e2) >1)return 1;
    return 0;
}
}

答案 1

如何将地图复制到自然反向排序的新地图中?

new TreeMap<String,Integer>(Collections.reverseOrder())

答案 2

简短的回答:

使用降序密钥集降序映射

长答案:

解决方案 1:

正如Oliver正确提到的,您可以将地图复制到新的树状图中以达到您的目标。

但是,使用 时,您不需要创建新的树状图:descendingKeySet

treeMap.descendingKeySet()

下面是一个示例:

private static void printReverseTreeMap(TreeMap<String,Integer> treeMap){
    for(String key : treeMap.descendingKeySet()){
        System.out.println("value of " + key + " is " + treeMap.get(key));
    }
}

解决方案 2:

您还可以使用以下方法以相反的顺序创建新地图:descendingMapCollections.reverseOrder()

NavigableMap<String, Integer> reveresedTreeMap = treeMap.descendingMap();

请注意,返回 .descendingMapNavigableMap


推荐