我制作了一個自定義比較器,用于根據字串中字符的頻率對字串進行排序。
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));
假設陣列是一個字符陣列,每次比較兩個字符時都會填充哈希圖,還是填充一次然后根據填充地圖的頻率決定順序?
uj5u.com熱心網友回復:
您正在實體化比較器并將其作為引數傳遞給Arrays.sort方法,這意味著將只有一個實體,因此HashMap填充一次。
就像這樣寫一樣:
public class CustomComparator implements Comparator<Character> {
//... same as yours
}
CustomComparator cs = new CustomComparator(s);
Arrays.sort(array, cs);
比較器被實體化一次,并且由于映射在建構式中被填充,它將被填充一次。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/365972.html
上一篇:除特定元素外的串列排序
