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代码如下:
/**
* 作者: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("排序后:");
//注释部分的输出也是正确的
// 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