java 对象 排序

Java API针对集合类型排序提供了两种支持:
java.util.Collections.sort( java.util.List)

java.util.Collections.sort(java.util.List, java.util.Comparator)

java.util.Arrays.sort(Object[] a)

 
第一个方法要求所排序的元素类必须实现 java.lang.Comparable接口。

第二个方法要求实现一个java.util.Comparator接口。

第三个方法要求数组中的所有元素都必须实现 Comparable 接口

 
java.lang.Comparable接口和 java.util. Comparator接口是 Java对排序最提供最基本支持。这两个接口不但可以用于集合元素排序,还可以用于数组排序。
 

如果数组或集合元素是String类型,则可以利用Java API实现的Comparator<String>对象String.CASE_INSENSITIVE_ORDER为容器元素排序。

例子:

(1) 第一种实现:java.util.Collections.sort(java.util.List)

Person2.java代码如下:

package ObjectSortPkg;

class Person2 implements Comparable{
    private String name;
    private int age;
    public Person2(){}
    public Person2(String name, int age){
        super();
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }


    public int compareTo(Object o) {
        // TODO Auto-generated method stub
        Person2 p = (Person2)o;
        if(this.age < p.age)
            return -1;
        else if(this.age < p.age)
            return 0;
        else
            return 1;
    }
}

ObjectSortTest1.java代码如下:

package ObjectSortPkg;

/**
 * 作者:zhouhong
 * 时间:2012.08.25
 * 方法1:使用Collections.sort(List)实现
 * 对象必须实现Comparable接口并复写compareTo()方法
 */

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

public class ObjectSortTest1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Person2[] ps3 = new Person2[] { new Person2("p0", 0),
                new Person2("p1", 3), new Person2("p2", 5),
                new Person2("p3", 4), new Person2("p4", 8),
                new Person2("p5", 6), new Person2("p6", 7),
                new Person2("p7", 1), new Person2("p8", 2),
                new Person2("p9", 9) };

        List<Person2> p3 = new ArrayList<Person2>();
        System.out.println("排序前:");
        for (int i = 0; i < 10; i++) {
            p3.add(ps3[i]);
            System.out.print(ps3[i].getName() + ":" + ps3[i].getAge() + " ");
        }
        System.out.println();

        System.out.println("使用Collections.sort(List)类来比较:");

        Collections.sort(p3);

        System.out.println("排序后:");

//注释部分的输出也是正确的

//        for (Iterator it = p3.iterator(); it.hasNext();) {
//            Person2 p = (Person2) it.next();
//            System.out.print(p.getName() + ":" + p.getAge() + " ");

//        }

        for (int i = 0; i < p3.size(); i++) {  
            Person2 p = (Person2) p3.get(i);  
            System.out.print(p.getName() + ":" + p.getAge() + " ");  
        }  
        System.out.println();
    }

}

运行结果:

排序前:
p0:0 p1:3 p2:5 p3:4 p4:8 p5:6 p6:7 p7:1 p8:2 p9:9
使用Collections.sort(List)类来比较:
排序后:
p0:0 p7:1 p8:2 p1:3 p3:4 p2:5 p5:6 p6:7 p4:8 p9:9

(2) 第二种实现:java.util.Collections.sort(java.util.List, java.util.Comparator)

Person1.java代码:

package ObjectSortPkg;

class Person1 {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Person1() {
    }

    public Person1(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

}


MyComparator.java代码:

package ObjectSortPkg;

import java.util.Comparator;

class MyComparator implements Comparator<Object>{

    public int compare(Object x, Object y) {
        Person1 p1 = (Person1)x;
        Person1 p2 = (Person1)y;
        if(p1.getAge() < p2.getAge())
            return -1;
        else if(p1.getAge() == p2.getAge())
            return 0;
        else
            return 1;
    }
}

ObjectSortTest2.java代码:

package ObjectSortPkg;
/**
 * 作者:zhouhong
 * 时间:2012.08.25
 * 方法1:使用Collections.sort(List, Comparator)实现
 * 必须实现Comparator的一个比较器并复写compare()方法
*/
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

public class ObjectSortTest2 {
    public static void main(String[] arg) {
        Person1[] ps = new Person1[] { new Person1("p0", 0),
                new Person1("p1", 3), new Person1("p2", 5),
                new Person1("p3", 4), new Person1("p4", 8),
                new Person1("p5", 6), new Person1("p6", 7),
                new Person1("p7", 1), new Person1("p8", 2),
                new Person1("p9", 9) };
        List<Person1> pl = new ArrayList<Person1>();
        System.out.println("Person1排序前:");
        for (int i = 0; i < 10; i++) {
            System.out.print(ps[i].getName() + ":"+ ps[i].getAge() + " ");
            pl.add(ps[i]);
        }
        System.out.println();
        System.out.println("使用Collections.sort(List, Comparator)类来比较:");

        Collections.sort(pl, new MyComparator());
        System.out.println("Person1排序后:" );

//  注释部分的输出也是正确的!
//        for (Iterator it = pl.iterator(); it.hasNext();) {
//            Person1 p = (Person1) it.next();
//            System.out.print(p.getName() + ":" + p.getAge() + " ");
//        }
        for (int i = 0; i < pl.size(); i++) {  
            Person1 p = (Person1) pl.get(i);  
            System.out.print(p.getName() + ":" + p.getAge() + " ");  
        }
        System.out.println();
    }
}

运行结果:

Person1排序前:
p0:0 p1:3 p2:5 p3:4 p4:8 p5:6 p6:7 p7:1 p8:2 p9:9
使用Collections.sort(List, Comparator)类来比较:
Person1排序后:
p0:0 p7:1 p8:2 p1:3 p3:4 p2:5 p5:6 p6:7 p4:8 p9:9

(3) 第三种实现:java.util.Arrays.sort(Object[] a)
Person2.java代码:同上(1)

ObjectSortTest3.java代码:

package ObjectSortPkg;

import java.util.Arrays;

public class ObjectSortTest3 {
    /**
     * 作者:zhouhong
     * 时间:2012.08.25
     * 方法2 :使用Arrays.sort(Object[])实现
     * 注意:对象必须实现Comparable接口并复写compareTo()方法   
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Person2[] ps2 = new Person2[] { new Person2("p0", 0),
                new Person2("p1", 3), new Person2("p2", 5),
                new Person2("p3", 4), new Person2("p4", 8),
                new Person2("p5", 6), new Person2("p6", 7),
                new Person2("p7", 1), new Person2("p8", 2),
                new Person2("p9", 9) };
        System.out.println("Person2比较前:");
        for (int i = 0; i < 10; i++)
            System.out.print(ps2[i].getName() + ":" + ps2[i].getAge() + " ");
        System.out.println();
        System.out.println("使用Arrays.sort(Object[])类来比较:");
        Arrays.sort(ps2);
        System.out.println("Person2比较后:");
        for (int i = 0; i < 10; i++)
            System.out.print(ps2[i].getName() + ":" + ps2[i].getAge() + " ");
        System.out.println();
    }
}

运行结果:

Person2比较前:
p0:0 p1:3 p2:5 p3:4 p4:8 p5:6 p6:7 p7:1 p8:2 p9:9
使用Arrays.sort(Object[])类来比较:
Person2比较后:
p0:0 p7:1 p8:2 p1:3 p3:4 p2:5 p5:6 p6:7 p4:8 p9:9



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值