自定义比较器,用于根据每个字符的出现频率对字符串进行排序
Custom Comparator for sorting string based on frequency of each character
我制作了一个自定义比较器,用于根据字符串中字符的频率对字符串进行排序。
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));
假设array是一个Character数组,hashmap是每次比较两个chars就填充一次,还是填充一次然后根据填充的map的出现频率来决定顺序?
您正在实例化比较器并将其作为参数传递给 Arrays.sort
方法,这意味着只有一个实例,因此 HashMap
被填充一次。
好像这样写是一样的:
public class CustomComparator implements Comparator<Character> {
//... same as yours
}
CustomComparator cs = new CustomComparator(s);
Arrays.sort(array, cs);
比较器被实例化一次,因为映射是在构造函数中填充的,所以它会被填充一次。
我制作了一个自定义比较器,用于根据字符串中字符的频率对字符串进行排序。
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));
假设array是一个Character数组,hashmap是每次比较两个chars就填充一次,还是填充一次然后根据填充的map的出现频率来决定顺序?
您正在实例化比较器并将其作为参数传递给 Arrays.sort
方法,这意味着只有一个实例,因此 HashMap
被填充一次。
好像这样写是一样的:
public class CustomComparator implements Comparator<Character> {
//... same as yours
}
CustomComparator cs = new CustomComparator(s);
Arrays.sort(array, cs);
比较器被实例化一次,因为映射是在构造函数中填充的,所以它会被填充一次。