Java实现集合,文件,数组排序 - 编程入门网
Java实现集合,文件,数组排序时间:2011-06-19 ITeye mx19841031System.out.print("before sort: "); for (int i = 0; i< arr.length; i++) System.out.print(arr[i] + " "); System.out.println(); Arrays.sort(arr); System.out.print("after sort: "); for (int i = 0; i< arr.length; i++) System.out.print(arr[i] + " "); System.out.println(); 输出结果: before sort: 2 3 1 10 7 4 after sort: 1 2 3 4 7 10 我们看到排序结果是按照升序排列的,下面的排序都是如此。 对象的排序 对象可以放在数组里,同样调用Arrays.sort(Object[] arr)即可;也可以放到集里,用java.util.Collections的sort(List list)。 但是这个类必须实现了java.lang.Comparable接口。这个接口只有一个方法:int compartTo(Object o), 当本对象比传入的对象大时,返回一个正整数。 以类Programmer为例: class Programmer implements Comparable{ private String name; private String language; private double pay; public Programmer(String name, String language, double pay) { this.name = name; this.language = language; this.pay = pay; } public int compareTo(Object o) { Programmer other = (Programmer)o; return (int)pay - (int)other.pay; } public String toString(){ return "{name: " + name + ", language: " + language + ", money: " + pay + "}"; } } Java实现集合,文件,数组排序(2)时间:2011-06-19 ITeye mx19841031对其进行排序: ArrayList list = new ArrayList(); list.add(new Programmer("张三", "C", 12000)); list.add(new Programmer("李四", "Java", 200)); list.add(new Programmer("王五", "C++", 5000)); list.add(new Programmer("钱六", "VB", 3000)); System.out.println("before sort: " + list); Collections.sort(list); System.out.println("after sort: " + list); 输出: before sort: [{name: 张三, language: C, money: 12000.0}, {name: 李四, language: Java, money: 200.0}, {name: 王五, language: C++, money: 5000.0}, {name: 钱六, language: VB, money: 3000.0}] after sort: [{name: 李四, language: Java, money: 200.0}, {name: 钱六, language: VB, money: 3000.0}, {name: 王五, language: C++, money: 5000.0}, {name: 张三, language: C, money: 12000.0}] 够简单吧!查查Comparable的javadoc可以知道,有很多类已经实现了该接口,因此对这些类的排序几行代码就可以搞定。 最近看C#发现其中用System.Array.sort对数组排序,适用于所有实现了IComparable接口的对象,看来微软的借鉴能力还真是强啊! 对已有类进行排序 上面的方法有一个问题,就是一个类已经存在了,并且没有实现Comparable接口,使用一个子类进行封装? 很麻烦(你可以对下面的例子试试)。还有一种情况就是对一个类没法实现多种排序。以File类为例,它实现了Comparable接口, 但是是按照名称排序的。如果要按照大小排序,或者按修改时间排序呢?对这两种情况,使用java.util包的Comparator接口: Arrays.sort(Object[] arr, Comparator com) Collections.sort(Object[] arr, Comparator com) Comparator接口的方法: public int compare(Object o1, Object o2) 当o1比o2大时返回一个正整数 public boolean equals(Object obj) 判断obj与这个Comparator是否同一个对象 下面 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |