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

来源:互联网 发布:淘宝分流是什么意思 编辑:程序博客网 时间:2024/06/04 20:34

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() );        }    }}
程序运行结果为:

ab


(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() );        }    }}
程序运行结果为:

ab

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




0 0