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

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}]

原文地址:https://www.cnblogs.com/mason117/p/10646619.html

时间: 2024-10-11 04:28:48

十五、Collections.sort(<T>, new Comparator<T>() {})针对字符串排序的相关文章

Collections.sort(List&lt;T&gt; Comparator) 自定义排序

Collections.sort(basicinfoList, new Comparator<MlisBasicinfo>() { @Override public int compare(MlisBasicinfo o1, MlisBasicinfo o2) { return o1.getBasicinfoValue().compareTo(o2.getBasicinfoValue()); } });

Java—集合框架 Collections.sort()、Comparable接口和Comparator接口

Collentions工具类--java.util.Collections Collentions是Java集合框架中,用来操作集合对象的工具类,也是Java集合框架的成员,与List.Map和Set是并列的. Collections.sort() 排序方法,实现对List对象中的元素进行排序. package com.test.collection; import java.util.ArrayList; import java.util.Collections; import java.ut

Java8 Collections.sort()及Arrays.sort()中Lambda表达式及增强版Comparator的使用

摘要:本文主要介绍Java8 中Arrays.sort()及Collections.sort()中Lambda表达式及增强版Comparator的使用. 不废话直接上代码 import com.google.common.collect.Lists; import org.junit.Assert; import org.junit.Test; import java.util.Arrays; import java.util.Collections; import java.util.Comp

Java Collections.sort方法对list集合排序

1.排序测试类 package com.ljq.test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class UserSort { public static void main(String[] args) { List<User> userList =new ArrayList<User&g

java Collections.sort()实现List排序自定义方法

方法一: package testSimple; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class testCollectionSort { public static void main(String[] args) { List<TblPowerGroup> list = new ArrayLis

java中Collections.sort排序详解

Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f,g这样,当然数字也是这样的.compare(a,b)方法:根据第一个参数小于.等于或大于第二个参数分别返回负整数.零或正整数.equals(obj)方法:仅当指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时才返回 true. Collections.so

升序 Collections.sort(list) 降序 Collections.reserve(list) 随机 Collections.shuffle(list)

1 package Day28ketangzuoye; 2 3 import java.util.ArrayList; 4 import java.util.Collections; 5 import java.util.Comparator; 6 import java.util.HashSet; 7 import java.util.List; 8 import java.util.Scanner; 9 10 public class DemoChars{ 11 12 public stat

Collections.sort方法对list排序的两种方式

Collections.sort( )分为两部分,一部分为排序规则,一部分为排序算法 . 规则用来判断对象,算法则考虑如何进行排序 对于自定义对象,sort()不知道规则,所以无法比较,这种情况下一定要定义排序规则.方式有两种: 第一种,java.lang下面的一个接口:Comparable.可以让自定义对象实现一个Comparable接口,这个接口只有一个方法comparableTo(Object o) 其规则是当前对象与o对象进行比较,返回一个int值,系统根据此值进行排序. 如当前对象>o

[转]java中Collections.sort排序详解

Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f,g这样,当然数字也是这样的. compare(a,b)方法:根据第一个参数小于.等于或大于第二个参数分别返回负整数.零或正整数. equals(obj)方法:仅当指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时才返回 true. Collections.