【发布时间】:2022-01-03 01:37:01
【问题描述】:
我制作了一个自定义比较器,用于根据字符串中字符的频率对字符串进行排序。
public class CustomComparator implements Comparator<Character> {
HashMap<Character,Integer> map;
public CustomComparator(String s) {
this.map = new HashMap<>();
for(char ch : s.toCharArray()) {
map.put(ch,map.getOrDefault(ch,0)+1);
}
}
@Override
public int compare(Character ch1,Character ch2) {
return map.get(ch2) - map.get(ch1);
}
}
Arrays.sort(array,new CustomComparator(s));
假设数组是一个字符数组,是每次比较两个字符时都填充hashmap,还是填充一次然后根据填充映射的频率决定顺序?
【问题讨论】:
-
这是基本的 Java。哈希图填充在构造函数中。构造函数被调用了多少次?提示:计算“新”关键字的出现次数。
-
那么,once-at-the-invoke 映射用于所有比较?我无法得到提示。
-
我认为@Manulako 的回答很好地解释了这一点。发生一次,与“新”的数量相同。
-
@Michael 知道了,谢谢!
-
顺便说一下,
char类型及其Character包装类自 Java 2 以来一直是 legacy。作为 16 位值,char在物理上无法表示大多数字符。要处理单个字符,请使用 code point 整数。
标签: java string sorting comparator