本篇文章小编给大家分享一下Java排序之sort方法使用代码解析,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
升序
升序是默认情况下的,所以这里就简单展示一下使用的方法;
数组
数组的sort方法位于Arrays工具类下
代码如下:
import java.util.Arrays; public class SortTest01 { public static void main(String[] args) { int[] array = {2, 4, 8, 9, 78, 1, 3, 66}; // 整型数组 Arrays.sort(array); // 升序排序 for (int i : array) { System.out.print(i + " "); } } }
结果如下:
1 2 3 4 8 9 66 78
集合
集合的sort方法位于Collections类下
代码如下:
import java.util.Collections; import java.util.LinkedList; import java.util.List; public class SortTest02 { public static void main(String[] args) { Listlist = new LinkedList<>(); // 定义一个链表 // 降序放入list for (int i = 10; i >= 0; --i) { list.add(i); } Collections.sort(list); // 升序排序 for (var i : list) { System.out.print(i + " "); } } }
结果如下:
0 1 2 3 4 5 6 7 8 9 10
降序
降序就需要一点额外的步骤;这里就需要用到一个接口:Comparator
其实实际上我们用到的只是Comparator
sort方法默认情况下是升序,但是它的一个重载版本可以额外放一个Comparator
可以看看Collections的sort方法:
还有Arrays里的sort方法
可以看到它们都Comparator
所以接下来的问题就是如何实现Comparator
下面就只用集合来作为例子;
声明一个类实现接口
代码如下:
import java.util.Collections; import java.util.Comparator; import java.util.LinkedList; import java.util.List; public class SortTest03 { public static void main(String[] args) { Listlist = new LinkedList<>(); // 定义一个链表 // 升序放入list for (int i = 0; i <= 10; ++i) { list.add(i); } Collections.sort(list, new MyCompare()); // 降序排序 for (var i : list) { System.out.print(i + " "); } } } class MyCompare implements Comparator { // 制定排序规则:降序 @Override public int compare(Integer o1, Integer o2) { return o2 - o1; } }
结果如下:
10 9 8 7 6 5 4 3 2 1 0
匿名内部类实现接口
代码如下:
import java.util.Collections; import java.util.Comparator; import java.util.LinkedList; import java.util.List; public class SortTest04 { public static void main(String[] args) { Listlist = new LinkedList<>(); // 定义一个链表 // 升序放入list for (int i = 0; i <= 10; ++i) { list.add(i); } // 匿名内部类降序排序 Collections.sort(list, new Comparator () { @Override public int compare(Integer o1, Integer o2) { return o2 - o1; } }); for (var i : list) { System.out.print(i + " "); } } }
结果如下:
10 9 8 7 6 5 4 3 2 1 0
Lambda表达式实现接口
代码如下:
import java.util.Collections; import java.util.LinkedList; import java.util.List; public class SortTest04 { public static void main(String[] args) { Listlist = new LinkedList<>(); // 定义一个链表 // 升序放入list for (int i = 0; i <= 10; ++i) { list.add(i); } // Lambda表达式降序排序 Collections.sort(list, (o1, o2) -> o2 - o1); for (var i : list) { System.out.print(i + " "); } } }
结果如下:
10 9 8 7 6 5 4 3 2 1 0
这三种方法还是需要根据实际情况使用的,假如这个排序规则需要多次使用,还是单独创建一个类实现比较好;
如果只是使用一次,那么就用匿名内部类或者Lambda表达式,相对而言Lambda表达式更简单;
自定义数据类型的排序
如果想要对自己定义的类实例化的对象进行排序,那么同样需要Comparator
下面例子通过创建一个类的方式来实现接口;
代码如下:
import java.util.Collections; import java.util.Comparator; import java.util.LinkedList; import java.util.List; public class SortTest05 { public static void main(String[] args) { Listlist = new LinkedList<>(); // 创建一个链表 list.add(new Student(18, "202101", "张三")); list.add(new Student(28, "202180", "李四")); list.add(new Student(11, "202135", "王五")); list.add(new Student(18, "202169", "赵六")); list.add(new Student(11, "202122", "小七")); list.add(new Student(48, "202156", "碧萝")); // 排序前 for (var i : list) { System.out.println("name:" + i.getName() + " age:" + i.getAge() + " ID:" + i.getID()); } Collections.sort(list, new StuCompare()); // 自定义排序规则排序 // 排序后 System.out.println("======================="); for (var i : list) { System.out.println("name:" + i.getName() + " age:" + i.getAge() + " ID:" + i.getID()); } } } // 学生类 class Student { private int age; // 年龄 private String ID; // 学号 private String name; // 姓名 public Student() { } public Student(int age, String ID, String name) { this.age = age; this.ID = ID; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getID() { return ID; } public void setID(String ID) { this.ID = ID; } public String getName() { return name; } public void setName(String name) { this.name = name; } } // 学生排序类 class StuCompare implements Comparator { // 升序 @Override public int compare(Student o1, Student o2) { int flag; // 先通过年龄排序 flag = o1.getAge() - o2.getAge(); // 如果年龄相同,则通过学号比较排序 if (flag == 0) { flag = o1.getID().compareTo(o2.getID()); } return flag; } }
结果如下:
name:张三 age:18 ID:202101
name:李四 age:28 ID:202180
name:王五 age:11 ID:202135
name:赵六 age:18 ID:202169
name:小七 age:11 ID:202122
name:碧萝 age:48 ID:202156
=======================
name:小七 age:11 ID:202122
name:王五 age:11 ID:202135
name:张三 age:18 ID:202101
name:赵六 age:18 ID:202169
name:李四 age:28 ID:202180
name:碧萝 age:48 ID:202156
可以看出来我们可以自己定义自定义类型的排序规则,非常简单;
这里我使用一个类实现了Comparator
总结:
需要掌握的就是两点:
sort基本方法使用
Comparator
忍者必须死34399账号登录版 最新版v1.0.138v2.0.72
下载勇者秘境oppo版 安卓版v1.0.5
下载忍者必须死3一加版 最新版v1.0.138v2.0.72
下载绝世仙王官方正版 最新安卓版v1.0.49
下载Goat Simulator 3手机版 安卓版v1.0.8.2
Goat Simulator 3手机版是一个非常有趣的模拟游
Goat Simulator 3国际服 安卓版v1.0.8.2
Goat Simulator 3国际版是一个非常有趣的山羊模
烟花燃放模拟器中文版 2025最新版v1.0
烟花燃放模拟器是款仿真的烟花绽放模拟器类型单机小游戏,全方位
我的世界动漫世界 手机版v友y整合
我的世界动漫世界模组整合包是一款加入了动漫元素的素材整合包,
我的世界贝爷生存整合包 最新版v隔壁老王
我的世界MITE贝爷生存整合包是一款根据原版MC制作的魔改整