我正在尝试使用freq的值对所有a-z字符进行排序。但是它不起作用。有人能解释为什么下面的代码不起作用吗?我如何按照我想要的方式对数组进行排序?谢谢。
char[] chars = new char[26];
int[] freq = new int[26];
for(int i = 0;i<26;i++){
chars[i] = (char)(i+'a');
}
for(char c:s.toCharArray()){
freq[c-'a']++;
if(freq[c-'a']>(s.length()+1)/2){
return "";
}
}
Arrays.sort(chars, (a, b)->(freq[b-'a'] - freq[a-'a']));
错误:找不到合适的排序方法(char[],(a,b)-
Supritam的回答是正确的。我将添加一个变通方法。
char类型是遗留的,基本上已损坏。作为一个16位值,char在物理上无法表示大多数字符。
而是使用代码点整数来处理单个字符。
与其使用一对数组,不如使用一个映射,一个键值对的集合。
Map< Integer , Integer > map = new HashMap<>();
someString
.codePoints()
.forEach(
codePoint -> map.put( codePoint , map.containsKey( codePoint ) ? map.get( codePoint ) + 1 : 1 )
) ;
现在我们有了每个代码点的出现次数。但问题的目标是报告按发生次数排序的结果。
该计数是我们地图上的值。所以我们需要按值对地图进行排序。如本文所述,有几种方法可以做到这一点。
List< Entry< Integer , Integer > > list = new ArrayList<>( map.entrySet() );
list.sort(
Entry.comparingByValue().thenComparing( Entry.comparingByKey() ) ;
);
list.forEach( ( Entry< Integer , Integer > entry ) -> System.out.println( entry.getValue() + " occurrences of " + Character.toString( entry.getKey() ) ) );
所有这些代码都未经测试。希望它离指导你的工作足够近。
根据javadocs,数组。使用比较器排序仅适用于对象而不是基本体。
rrays.sort(char[])按数字顺序排序。
为了解决您的问题:
String s = "hello";
Map<Character, Integer> returnMap = new HashMap<Character, Integer>();
Map<Character, Integer> map = new HashMap<Character, Integer>();
for (int i = 0; i < 26; i++) {
map.put (Character.valueOf((char)(i + 'a')), 0);
}
for (char c : s.toCharArray()) {
Integer freq = map.get(Character.valueOf(c));
map.put(Character.valueOf(c),++freq);
}
List<Map.Entry<Character,Integer>> listToSort = new LinkedList<>(map.entrySet());
Collections.sort(listToSort, (m1, m2)->(
m2.getValue().compareTo(m1.getValue())
)
);
listToSort.forEach(entry -> System.out.println(entry.getKey()+":"+entry.getValue()));
如果两个集合包含相同的对象,如何进行比较? 当然会打印出假的。
编辑问题以包括所需的行为、特定问题或错误,以及再现问题所需的最短代码。这将帮助其他人回答这个问题。 我的任务是用java编写mergesort,任务还规定我不能使用整数,我必须使用可比较的整数。这是我第一次使用java。我的问题是在合并函数内比较两个comp int数组中的元素。我尝试了if(list[I])compareTo(list2[j]),但compareTo只能取整数。任何帮助都将不胜感
我试着比较两个物体,两个物体在每个区域上都有完全相同的值。 请注意,它们都打印相同的结果。 然而,当我比较每个对象中的字段时,和使用。等于时,返回值为false。 以下是比较数值的方法示例: 是否有其他方法可以比较和?所有其他字段在相同的equals方法中返回true(如预期)。 数字2={10,11}和字符串2={7c2cfc4e-5805-45ad-8687-4f2412a92e1d,d91b
如果我有一个由T对象组成的PriorityQueue,并且T有一个compareTo()方法并实现comparable,但是我的PriorityQueue也使用一个comparator作为参数,那么我的PriorityQueue在元素的顺序方面会寻找什么? 换句话说,哪一个决定了对象的优先级?compareTo()方法或提供的比较器?
问题内容: 因此,我正在研究比较器问题,但无法弄清楚为什么在第一堂课中给我以下错误: 数组类型中的方法sort(T [],Comparator)不适用于参数(ArrayList,CalorieComparator) 餐厅等级: CalorieComparator类: 问题答案: An 与Java数组不同;由于您使用的是列表,因此对您无济于事。 考虑代替。
如果两个集合包含相同的对象,如何进行比较? 当然会打印错误。