我正在尝试根据每个字符char[] input
char[] freq
进行排序
一个非常简单的例子是:
input: bey
freq input: bbbyye
output: after sorted would be "bye"
我正在迭代我的freq输入并放置一个键值对,如下面的问题:char c是关键; int是值。
现在;如何根据频率对输入进行排序?我尝试实施比较器的尝试遇到了失败。我的代码现在与以下accepted answer相同。
我想要的"要做的是糟糕的java或伪代码是:
char[] input;
Arrays.sort(input, new Comparator<Character>() {
@Override
public int compare(Character o1, Character o2) {
return counts.get(o2) - counts.get(o1); //counts is a static
//global hashmap with the frequency values
}
});
我不希望它工作,它不会错误是Arrays类型中的方法sort(char [])不适用于参数(char [],new Comparator(){})
答案 0 :(得分:4)
我很困惑,看来您的初始方法确实有效。这是一个小例子:
import java.util.*;
public class TestArrayComparator {
public static Map<Character, Integer> freq = new HashMap<>();
static {
freq.put('b',3);
freq.put('y',2);
freq.put('e',1);
}
public static void main(String[] args) {
Character[] input = new Character[]{'b','e','y'};
Arrays.sort(input, new Comparator<Character>() {
@Override
public int compare(Character o1, Character o2) {
return freq.get(o2) - freq.get(o1);
}
});
System.out.println(Arrays.toString(input));
}
}
//outputs ['b','y','e']
我并不是说这是最佳方法,但确实有效。
答案 1 :(得分:1)
我认为在这种情况下你应该做的是为FrequencyCharacter创建一个新类
public class FrequencyCharacter implements Comparable<FrequencyCharacter> {
private int occurrences;
private char c;
public FrequencyCharacter(int occurrences, char c) {
this.occurrences = occurrences;
this.c = c;
}
@Override
public int compareTo(FrequencyCharacter o) {
return Integer.compare(occurrences, o.occurrences);
}
}
创建这些对象然后对它们进行排序。您可以轻松打印结果。