十五、Collections.sort(, new Comparator() {})针对字符串排序


1、排序对象全是字母组成,可以根据ASCII编码表排序

package com.abcd; public class Person{ private String name; private int age; private int salary; public Person() { } public Person(String name, int age, int salary) { this.name = name; this.age = age; this.salary = salary; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getSalary() { return salary; } public void setSalary(int salary) { this.salary = salary; } @Override public String toString() { return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", salary=" + salary +
                '}'; } }

2、排序测试代码

 

package com.abcd; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class PersonTest { public static void main(String[] args){ List<Person> people = new ArrayList<>(); people.add(new Person("ZZZ",20,100)); people.add(new Person("aaa",48,109)); people.add(new Person("aa",30,109)); System.out.println(people); Collections.sort(people, new Comparator<Person>() { @Override public int compare(Person o1, Person o2) { return o1.getName().toLowerCase().compareTo(o2.getName().toLowerCase()); } }); System.out.println(people); } }

 

 int comparaTo( )方法底层源码:

public int compareTo(String anotherString) { int len1 = value.length; int len2 = anotherString.value.length; int lim = Math.min(len1, len2); char v1[] = value; char v2[] = anotherString.value; 
     //首先的比较规则,比较首字母,依次第二位字母,第三位字母等逐个比较
int k = 0; while (k < lim) { char c1 = v1[k]; char c2 = v2[k]; if (c1 != c2) { return c1 - c2; } k++; }
     //然后字母比较完了后,比较字符串的长度
return len1 - len2; }

 

 3、运行结果

[Person{name='ZZZ', age=20, salary=100}, Person{name='aaa', age=48, salary=109}, Person{name='aa', age=30, salary=109}] [Person{name='aa', age=30, salary=109}, Person{name='aaa', age=48, salary=109}, Person{name='ZZZ', age=20, salary=100}]

 

 


 

2、排序目标全是中文,实现首字母排序

 

package com.abcd; import java.text.Collator; import java.util.*; public class PersonTest { public static void main(String[] args){ List<Person> people = new ArrayList<>(); people.add(new Person("博泰",20,100)); people.add(new Person("阿明",48,109)); people.add(new Person("啊",30,109)); System.out.println(people); Collections.sort(people, new Comparator<Person>() { @Override public int compare(Person o1, Person o2) { Comparator cmp = (Collator.getInstance(Locale.CHINA)); return cmp.compare(o1.getName(), o2.getName()); } }); System.out.println(people); } }

 

运行结果:

[Person{name='博泰', age=20, salary=100}, Person{name='阿明', age=48, salary=109}, Person{name='啊', age=30, salary=109}]
[Person{name='啊', age=30, salary=109}, Person{name='阿明', age=48, salary=109}, Person{name='博泰', age=20, salary=100}]

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM