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