(一)list 和数组
List 默认排序代码:
- public static void main(String[] args) {
- List<String> list = new ArrayList<>();
- list.add("阿 a 里");
- list.add("不 b 安定");
- list.add("嘻 x 嘻");
- list.add("一 y 一");
- list.add("传 c 递");
- list.add("东 d 西");
- list.add("耳 e 朵");
- list.add("分 f 数");
- for (int i=0;i<list.size();i++){
- System.out.print(list.get(i));
- }
- // 降序以现有 list 的顺序 ---- 从后往前输出
- System.out.println("降序");
- Collections.reverse(list);
- for (int i=0;i<list.size();i++){
- System.out.print(list.get(i));
- }
- // 依照 list 现在顺序 --- 从前往后读 一 y 一 不 b 安定 东 d 西 传 c 递 分 f 数 嘻 x 嘻 耳 e 朵 阿 a 里
- System.out.println("升序");
- Collections.sort(list);
- for (int i=0;i<list.size();i++){
- System.out.print(list.get(i));
- }
- System.out.println("按照汉语拼音排序");
- // 排序 abcdefg 这么来的首字母按照汉语拼音来的
- Collections.sort(list,Collator.getInstance(Locale.CHINA));
- for (int i=0;i<list.size();i++){
- System.out.print(list.get(i));
- }
- }
: 数组:
- String[] names = {"阿 a 里", "把 b 把", "阿 a 里", "得 d 到", "额 e 额", "得 d 到","阿 b 里"};
- // 应该是根据 ASCII 码这么来的
- Arrays.sort(names);
- System.out.println(Arrays.toString(names));
- Arrays.sort(names,Collator.getInstance(Locale.CHINA));
- // 根据中文字母表排序, 先比较第一个字母拼音, 再比较第二个字母拼音
- System.out.println(Arrays.toString(names));
(二) 自定义排序:
实现 Comparable 接口, 类内设比较项
- public class Test1 implements Comparable {
- /*
- * 1. 实现 Comparable 接口
- * 重写 int compareTo(Object o) 方法
- * */
- private String name;
- private Integer age;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Integer getAge() {
- return age;
- }
- public void setAge(Integer age) {
- this.age = age;
- }
- public Test1(String name, Integer age) {
- this.name = name;
- this.age = age;
- }
- @Override
- public int compareTo(Object o) {
- Test1 sutdent = (Test1) o;
- int age1 = sutdent.getAge();
- return this.age.compareTo(age1);
- }
- public static void main(String[] args) {
- List<Test1> students = new ArrayList<>();
- Test1 s1 = new Test1("十一", 11);
- Test1 s2 = new Test1("十二", 12);
- Test1 s3 = new Test1("十三", 13);
- Test1 s4 = new Test1("十四", 14);
- students.add(s1);
- students.add(s4);
- students.add(s2);
- students.add(s3);
- students.add(s2);
- //reverse 仅仅只是反转
- Collections.reverse(students);
- for (Test1 t : students) {
- System.out.print(t.getAge() + " ");
- }
- // 调用自己的类的 int 属性进行比较
- Collections.sort(students);
- for (Test1 t : students) {
- System.out.print(t.getAge() + " ");
- }
- System.out.println(" ");
- }
- }
实现 Comparator 接口, 类外设比较项
- public class Test1 implements Comparator<Test1> {
- /*
- * 1. 实现 Comparable 接口
- * 重写 int compareTo(Object o) 方法
- * */
- private String name;
- private Integer age;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Integer getAge() {
- return age;
- }
- public void setAge(Integer age) {
- this.age = age;
- }
- public Test1() {
- }
- public Test1(String name, Integer age) {
- this.name = name;
- this.age = age;
- }
- @Override
- public int compare(Test1 o1, Test1 o2) {
- return o1.age.compareTo(o2.age);
- }
- public static void main(String[] args) {
- Test1 s1=new Test1("小 1",11);
- Test1 s3=new Test1("小 3",13);
- Test1 s2=new Test1("小 2",12);
- Test1 s4=new Test1("小 4",14);
- //Array.adList 就是固定长度集合
- List<Test1> students=Arrays.asList(s1,s3,s2,s4);
- for (Test1 s:students){
- System.out.print(s.age+" ");
- }
- System.out.println("排序后");
- Collections.sort(students,new Test1());
- for (Test1 s:students){
- System.out.print(s.age+" ");
- }
- } }
来源: http://www.bubuko.com/infodetail-2537610.html