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

1.java提供的默认list排序方法

例子程序如下:

package outputMml2;

import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Test2 {

    public static void main( String[] args ) {

        List < String > list = new ArrayList();
        list.add( "张三" );
        list.add( "李四" );
        list.add( "王二" );
        // 升序 ,根据的汉字的拼音的字母排序的
        Collections.sort( list, Collator.getInstance( java.util.Locale.CHINA ) );
        for ( int i = 0; i < list.size(); i++ ) {
            System.out.print( list.get( i ) );
        }
        System.out.println( "" );

        // 降序
        Collections.reverse( list );// 不指定排序规则时,也是按照字母的来排序的
        for ( int i = 0; i < list.size(); i++ ) {
            System.out.print( list.get( i ) );
        }

    }

程序运行结果为:

李四王二张三
张三王二李四

2. 自定义的排序规则

(1)实现Comparable接口,重写重写int compareTo(Object o)方法

package outputMml2;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
* 根据order对User排序
*/
class User implements Comparable < User > {
    private String name;
    private Integer order;

    public String getName() {
        return name;
    }

    public void setName( String name ) {
        this.name = name;
    }

    public Integer getOrder() {
        return order;
    }

    public void setOrder( Integer order ) {
        this.order = order;
    }

    public int compareTo( User arg0 ) {
        return this.getOrder().compareTo( arg0.getOrder() );
    }
}

public class Test {
    public static void main( String[] args ) {
        User user1 = new User();
        user1.setName( "a" );
        user1.setOrder( 1 );
        User user2 = new User();
        user2.setName( "b" );
        user2.setOrder( 2 );
        List < User > list = new ArrayList < User >();
        // 此处add user2再add user1
        list.add( user2 );
        list.add( user1 );
        Collections.sort( list );
        for ( User u : list ) {
            System.out.println( u.getName() );
        }
    }

}
程序运行结果为:

a
b


(2)实现Comparator接口,重写int compare(Object o1, Object o2)方法

package outputMml2;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
* 根据order对User排序
*/
class User { // 此处无需实现Comparable接口
    private String name;
    private Integer order;

    public String getName() {
        return name;
    }

    public void setName( String name ) {
        this.name = name;
    }

    public Integer getOrder() {
        return order;
    }

    public void setOrder( Integer order ) {
        this.order = order;
    }
}

public class Test {
    public static void main( String[] args ) {
        User user1 = new User();
        user1.setName( "a" );
        user1.setOrder( 1 );
        User user2 = new User();
        user2.setName( "b" );
        user2.setOrder( 2 );
        List < User > list = new ArrayList < User >();
        list.add( user2 );
        list.add( user1 );

        Collections.sort( list, new Comparator < User >() {
            public int compare( User arg0, User arg1 ) {
                return arg0.getOrder().compareTo( arg1.getOrder() );
            }
        } );
        for ( User u : list ) {
            System.out.println( u.getName() );
        }
    }
}
程序运行结果为:

a
b

   两种自定义的排序规则,前者代码结构简单,但是只能根据固定的属性排序,后者灵活,可以临时指定排序项,但是代码不够简洁易懂。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值