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);
}
}
}
}