【问题标题】:How to sort hashmap by value not by keys [duplicate]如何按值而不是键对哈希图进行排序[重复]
【发布时间】:2016-05-08 08:05:27
【问题描述】:

我希望我的代码根据一个值对我的哈希图进行排序。用户将输入字符串并计算出现次数。字符及其出现将存储到 hasmap 中。它应该按升序排序,而不关心它的键。在我的代码中,如果它们都具有相同的值,则按字母顺序排序。如果它们具有相同的值,我不希望它进行排序。

期望的输出:
输入一个字符串:maabccc
米:1
乙:1
答:2
c: 3

程序的输出:
输入一个字符串:maabccc
乙:1
米:1
答:2
c: 3

public static void main(String args[]){
    System.out.print("Enter a string: ");
    string = input.nextLine();

    char newChar[] = string.toCharArray();
    int count[] = countFrequency(string);
    Map<Character, Integer> sortedMap = sortByComparator(hm);

    for(Entry<Character, Integer> entry : sortedMap.entrySet()){
        System.out.println(entry.getKey() + " : " + entry.getValue());
    }
}
public static Map<Character, Integer> sortByComparator(Map<Character, Integer> unsortMap){
    List<Entry<Character, Integer>> list = new LinkedList<>(unsortMap.entrySet());

    Collections.sort(list, new Comparator<Entry<Character, Integer>>(){
        @Override
        public int compare(Entry<Character, Integer> o1, Entry<Character, Integer> o2){
            return o1.getValue().compareTo(o2.getValue());
        }
    });

    Map<Character, Integer> sortedMap = new LinkedHashMap<>();
    for(Entry<Character, Integer> entry : list)
        sortedMap.put(entry.getKey(), entry.getValue());

    return sortedMap;
}

【问题讨论】:

  • 您似乎已经完成了排序 - 您的问题是什么?
  • @assylias 我希望它排序,但如果有两个或多个具有相同值的字符,则第一个输入的字符应位于第一行且不应排序。在代码中,如果它们都具有相同的值,则按字母顺序排序。

标签: java sorting linked-list hashmap


【解决方案1】:

我希望它排序,但如果有两个或更多具有相同值的,第一个输入字符应该在第一行,不应该排序。在代码中,如果它们都具有相同的值,则按字母顺序排序

使用 LinkedHashMap 一个哈希表和 Map 接口的链表实现,具有可预测的迭代顺序。你没有发布你的 countFrequency 所以我写了一个喜欢,

static Map<Character, Integer> countFrequency(String str) {
    Map<Character, Integer> map = new LinkedHashMap<>();
    for (char ch : str.toCharArray()) {
        if (map.containsKey(ch)) {
            map.put(ch, 1 + map.get(ch));
        } else {
            map.put(ch, 1);
        }
    }
    return map;
}

然后我把main改成了喜欢

public static void main(String args[]) {
    Scanner input = new Scanner(System.in);
    System.out.print("Enter a string: ");
    String string = input.nextLine();
    Map<Character, Integer> sortedMap = sortByComparator(countFrequency(string));
    for (Entry<Character, Integer> entry : sortedMap.entrySet()) {
        System.out.println(entry.getKey() + " : " + entry.getValue());
    }
}

然后用你的输入运行它,得到你指定的输出。

【讨论】:

    猜你喜欢
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 2017-07-16
    • 2011-08-12
    相关资源
    最近更新 更多