持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情
最近一直在力扣刷题,也逐渐对各类题型有了自己的理解,所谓见招拆招,将自己的浅显经验分享一下,帮助更多在编程路上的朋友们。
先从排序开始!
如果题目中对数组的元素位置无要求,或者说改变数组元素位置并不会影响结果时,第一反应就是要对数组进行排序
排序默认为升序排序,若想降序排序,或者更复杂的排序方式,例如,将Map中的key根据其value大小排序,通俗来说,就是对于一个存放 <姓名,成绩> 的Map,我们想获得一个根据成绩排名的姓名数组,虽然说数组中存放的是姓名,但是我要根据其对应的成绩来排序,这就可以通过重写比较器来实现。
比较器Comparator
还是上面的例子
List<String> list = new ArrayList<>();
Map<String, Integer> map = new HashMap<>();
map.put("jack", 66);
map.put("tom", 40);
map.put("tifa", 98);
list.add("jack");
list.add("tom");
list.add("tifa");
Collections.sort(list, new Comparator<String>() {
public int compare(String s1, String s2) {
return map.get(s1) - map.get(s2);
}
});
//此时list为["tom", "jack", "tifa"]
对于compare(Object o1, Object o2)方法的:
分享一下个人的记忆方法,
该方法只作用于两个元素之间的比较,确定二者是否符合我们需要的序列
参数先写o1。后写o2,表示在原序列中,o1在前,o2在后
如果返回值大于零,二者交换顺序,如果小于等于零,则报持不变。
lambda表达式
List<Integer> list = new ArrayList<>();
list.add(3);
list.add(1);
list.add(8);
Collection.sort(list, (o1, o2) -> o2 - o1);//降序排序
String[] arr = new String[3]{"aba", "bbbbb", "c"};
Arrays.sort(arr, (o1, o2) -> o1.length() - o2.length());//根据字符串长度升序排序
数组
对于数组来说,排序使用Arrays.sort()
这里有个坑需要注意,Arrays.sort()方法,只有对象数组可以重写比较器,基本类型的数组只能升序排序
List
Collections.sort()
List中存放的都是对象,故任何类型的数据都可以重写比较器