Java使用库函数排序

java中使用库函数排序,递增,递减,对于数组,对于List集合排序。对于基本数据类型外的对象类型排序。
主要方法:
Arrays.sort(array);
Collections.sort(list);
Arrays.sort(nameArray,Comparator);
Collections.sort(list,Comparator);

1. 对于数组–Arrays.sort(array)

递增排序 Arrays.sort(strArray );

int[] intArray = new int[] {2, 1, 3, -2};
Arrays.sort(intArray);

for(int i = 0;i<intArray.length;i++){
        System.out.print(intArray[i]+" ");
    }
运行结果:-2 1 2 3
----------
String[] strArray = new String[] {"x","a","B"};
Arrays.sort(strArray );

for(int i = 0;i<strArray .length;i++){
        System.out.print(strArray[i]+" ");
    }
运行结果:B a x

递减排序 Arrays.sort(intArray,Comparator.reverseOrder());

int[] intArray = new int[] {2, 1, 3, -2};
Arrays.sort(intArray,Comparator.reverseOrder());

for(int i = 0;i<intArray.length;i++){
        System.out.print(intArray[i]+" ");
    }
运行结果: 3 2 1 -2


----------
String[] strArray = new String[] {"x","a","B"};
Arrays.sort(strArray,Comparator.reverseOrder() );

for(int i = 0;i<strArray .length;i++){
        System.out.print(strArray[i]+" ");
    }
运行结果:x a B

对于String类型的,不区分大小写排序:
Arrays.sort(strArray,String.CASE_INSENSITIVE_ORDER);

String[] strArray = new String[] {"x","a","B"};
Arrays.sort(strArray,String.CASE_INSENSITIVE_ORDER);

for(int i = 0;i<strArray .length;i++){
        System.out.print(strArray[i]+" ");
    }
运行结果:a B x

2.对于List –Collections.sort(list)

递增顺序 Collections.sort(list);

LinkedList list = new LinkedList();
list.add(2);
list.add(3);
list.add(1);
list.add(-2);
Collections.sort(list);
System.out.println(list.toString());
运行结果:-2 1 2 3

递减顺序 Collections.sort(list,Collections.reverseOrder());

LinkedList list = new LinkedList();
list.add(2);
list.add(3);
list.add(1);
list.add(-2);
Collections.sort(list,Collections.reverseOrder());
System.out.println(list.toString());
运行结果: 3 2 1 -2

对于String类型,同样适用。

3. 对于对象数组–使用Comparator接口

区别与上面的基本数据类型(int,char等),对于对象的排序就要用到自定义的Comparable接口了。以比较名字为例。
先比较姓,再比较名,按字典序递增排序
第一种写法:将实例类实现Comparable接口,重写compareTo(Object o)方法。
lastName.compareTo(o.lastName)的返回值有等于0,大于0,小于0三种情况。
如果等于0,则lastName字符串与o.lastName的字符串相同
如果大于0,则astName字符串大于o.lastName的字符串
如果小于0,则astName字符串小于o.lastName的字符串

class Name implements Comparable<Name>{  
    public String firstName,lastName;  
    public Name(String firstName,String lastName){  
        this.firstName=firstName;  
        this.lastName=lastName;  
    }  
    public int compareTo(Name o) {          //实现接口  
        int lastCmp=lastName.compareTo(o.lastName);  
        return (lastCmp!=0?lastCmp:firstName.compareTo(o.firstName));  
    }      
    public String toString(){                //便于输出测试  
        return firstName+" "+lastName;  
    }  
} 

测试类:

public static void main(String[] args) {
    Name nameArray[] = {  
            new Name("John", "Lennon"),  
            new Name("Karl", "Marx"),  
            new Name("Groucho", "Marx"),  
            new Name("Oscar", "Grouch")  
        }; 
        Arrays.sort(nameArray);  
        for(int i=0;i<nameArray.length;i++){
            System.out.println(nameArray[i].toString());  
        }  
}
运行结果: 
Oscar Grouch
John Lennon
Groucho Marx
Karl Marx

第二种写法:
实例类不用实现Comparable接口,而在排序的时候,需要写Comparator 接口。
排序时调用 Arrays.sort(nameArray,lastNameOrder);
其中,lastNameOrder为Comparator接口

这里以先比较名,再比较姓为例

class Name2{  
    public String firstName,lastName;  
    public Name2(String firstName,String lastName){  
        this.firstName=firstName;  
        this.lastName=lastName;  
    }  
    public String toString(){                //便于输出测试  
        return firstName+" "+lastName;  
    }

}  

测试类:

public class Test {

public static void main(String[] args) {
    //实现Comparator的接口
    Comparator firstNameOrder=new Comparator<Name2>() {  
        public int compare(Name2 n1, Name2 n2) {  
             int firstCmp=n1.firstName.compareTo(n2.firstName);  
             return (firstCmp!=0?firstCmp:n1.lastName.compareTo   
                     (n2.firstName));  
        }

    }; 
    Name2 nameArray[] = {  
            new Name2("John", "Lennon"),  
            new Name2("Karl", "Marx"),  
            new Name2("Groucho", "Marx"),  
            new Name2("Oscar", "Grouch")  
        }; 
        Arrays.sort(nameArray,firstNameOrder);
        //或者用Collections.sort也一样,只不过要转换成List
//Collections.sort(Arrays.asList(nameArray),firstNameOrder);
        for(int i=0;i<nameArray.length;i++){
            System.out.println(nameArray[i].toString());  
        }  
}
运行结果:
Groucho Marx
John Lennon
Karl Marx
Oscar Grouch

注意:
是Collections, 而不是 Collection
是Arrays ,而不是 Array

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子林Android

感谢老板,老板大气!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值