Collextions工具类 字典排序的“源码”
在对自定义类的自定义排序的排序方法有两种:
前提是 都养创建LIst 或其子类的 集合 在该集合中存放自定义类的对象(当然,这个对象你已经完成了初始化)
前提是 都养创建LIst 或其子类的 集合 在该集合中存放自定义类的对象(当然,这个对象你已经完成了初始化)
1.按数字的顺序排序
要排序的自定义类要去实现 Comparable的接口 重写comparable接口中的 compareTo() 接口
数字的自定义排序
升序:前 - 后(this.成员变量 - 参数.成员变量)
降序:后 - 前(参数.成员变量 - this.成员变量)
public class Person implements Comparable <Person>{ private String name; private int age; /** 提供满参构造方法*/ public Person(String name, int age) { this.name = name; this.age = age; } /** 重写toString方法*/ @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } /** 重写comparable接口中的 compareTo()方法*/ @Override public int compareTo(Person obj) { /** * 自定义排序规则 * 升序 return this.成员变量 - 参数(obj).成员变量 * 降序 return 参数(obj).成员变量 - this.成员变量 * */ return this.age - obj.age; } }
2.按字符串的字典排序
Collections.sort(list, new Comparator<String>() {Collections.sort(list, new Comparator<String>){
重写接口comparator<E> 的compare 方法
}
package com.itheima.demo2sort; import java.util.*; /** * @author ChenY@itheima.com * @date 2022/7/26 19:27 */ public class DictionarySort { public static void main(String[] args) { Scanner sc = new Scanner(System.in); /** 判断最后有没有可以扫描的东西*/ while (sc.hasNext()){ /** 确定你要输入的字符串的个数*/ int n = sc.nextInt(); /** 利用多态创建对象*/ List<String> list = new ArrayList<>(); /** 将字符串存放到集合 list 中去*/ for (int i = 0; i < n; i++) { String str = sc.next(); list.add(str); } /** 调用collections工具类的 的sort方法,重写compare方法 * 根据指定比较器产生的顺序对指定列表进行排序 * 比较用来排序的两个参数。根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数 * */ Collections.sort(list, new Comparator<String>() { @Override /** 返回值的类型是 int*/ public int compare(String o1, String o2) { /** 分别将参数o1,o2 toCharArray()是将字符串 转成对应的字符数组*/ char[] ch1 = o1.toCharArray(); char[] ch2 = o2.toCharArray(); /** 字典排序*/ int i = 0; /** 在这里开始循环比较 集合中 两个字符串对象的单个字符之间的关系*/ while (i<ch1.length&&i<ch2.length){ /** o1在o2 之前 ,如果o1的字符在比o2的字符大的话 就返回true*/ if (ch1[i]>ch2[i]){ return 1; }else if(ch1[i]<ch2[i]){ return -1; }else{ i++; } }/** 这个循环会一直进行下去 直到循环条件不满足的时候 */ /** 字符串的字符数组 o1 到头*/ if (i==ch1.length){ return -1; } /** 字符串的字符数组 o2 到头*/ if (i==ch2.length){ return 1; } return 0; } }); /** list集合存取顺序一致 将集合中的元素 s 取出*/ for (String s : list) { System.out.println(s); } } } }