Java-List数组排序的使用—Collections.sort()
在编码中 经常用到对对象数组或者map等集合的排序
下面就让我们来学习一下Collections.sort()的使用
- 场景力扣692题前K个高频单词
public List<String> ass(String[] words, int k){
//分析题意 将单词出现的频率进行从高到低的排序
/**
* 首先想到的是遍历字符串数组words 放进map里面从而获取各个单词的数量 然后将map进行排序
* 但是 官方并没有提供map的排序方法 像Arrays.sort一样方便的排序方法、
* 但是集合中含有一个可以给List进行排序的方法
*
*
*/
//基本操作放进map里面 同时将之前没有出现过的单词放进list里面
List<String> list = new ArrayList<>();
HashMap<String,Integer> map = new HashMap<>();
for(int i =0;i<words.length;i++) {
if(map.containsKey(words[i])) {
map.put(words[i], map.get(words[i])+1);
}else {
map.put(words[i], 1);
list.add(words[i]);
}
}
// 下面就要进行排序了
//首先调用这个方法之后传入一个List类型的数字 再new Comparator<T> 之后编辑器会提醒重写一个方法
Collections.sort(list,new Comparator<String>() {
// 重写这个compare 方法 返回值为int类型
@Override
public int compare(String o1, String o2) {
//这里的o1 o2 就是两个单词 从list数组里面取出的单词
//可以根据你的需要来返回一个int类型的值 如果这个值大于0则更换位置 小于0则不变换位置(先这么理解 本人不专业)
//依据题意在两个单词出现次数相同的时 按字母顺序排序
return map.get(o1)==map.get(o2)? o1.compareTo(o2) : map.get(o1)-map.get(o2);
}
});
//最后输出数组
return list.subList(0, k);
}
- 所以在使用的过程中通过灵活变化是可以根据所需要的将数组中的对象等进行排序的