Java对数组排序
Java对数组排序
刷leetcode肯定会用到排序,在Java中对数组排序用Arrays
,对集合类排序用Collections
。
工具类Arrays
数组排序用Arrays,Arrays专门针对int[]
,Object[]
等基础数组
//基础类型排序。只支持升序
int[] ints = new int[]{8,3,6,5,4,7,9,1,2};
Arrays.sort(ints);//升序,向变降序必须转化为Integer然后再操作
//基础类型要使用降序,需要转换
// 通过流操作转成IntStream,然后排序,再在转回IntStream,通过toArray()获取int[]
// ints = Arrays.stream(ints)
// .boxed()
// .sorted((o1,o2)->o2-o1)
// .mapToInt(o->o)
// .toArray();
double[] doubles = new double[]{8,3,6,5,4,7,9,1,2};
Arrays.sort(doubles);//升序
//引用类型排序,可根据自定义Comparator,或者实现接口Comparable来控制升降序
User[] users = new User[]{new User("zhangsan",11),new User("lisi",15)};
Arrays.sort(users, (o1, o2) -> o2.getAge()-o1.getAge());//根据自定义Comparator,降序
Object[] objects = new Object[]{new User("zhangsan",11),new User("lisi",15)};
Arrays.sort(objects);//User实现了Comparable,自定义为降序
工具类Collections
集合类的排序使用Collections
。这里的排序只能针对有顺序性的集合类
//List的都能排序
List<Integer> arrayList = new ArrayList<>();
arrayList.add(5);
arrayList.add(2);
arrayList.add(7);
Collections.sort(arrayList); //升序
LinkedList<Integer> linkedList = new LinkedList<>();
linkedList.add(5);
linkedList.add(2);
linkedList.add(7);
Collections.sort(linkedList,(o1, o2) -> o2-o1); //降序