Java集合或数组的排序有两种方式,使用自定义的比较器以及内部元素实现Comparable接口:
一.使用自定义的比较器
1. person类:
package com.qdl.test;
public class Person {
private String name;
private int age;
public Person(String name, int age){
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;
}
}
2. 自定义的比较器:
package com.qdl.test;
import java.util.Comparator;
public class MyComparator implements Comparator
{
//定义一些排序规则
public int compare(Person p1, Person p2) {
if(p1.getAge()
return -1; //返回负整数
}else if(p1.getAge()==p2.getAge()){
return 0; //返回0
}else{
return 1; //返回正整数
}
}
}
3. 测试程序:
package com.qdl.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test {
public static void main(String[] args) {
List
persons = new ArrayList();
persons.add(new Person("aaa",25));
persons.add(new Person("bbb",18));
persons.add(new Person("ccc",20));
persons.add(new Person("ddd",45));
MyComparator comparator = new MyComparator();
// 数组的话使用:Arrays.sort(T[] a, Comparator extends T>);
Collections.sort(persons,comparator);
for(Person p:persons){
System.out.println(p.getName()+"-->"+p.getAge());
}
}
}
输出结果为(按年龄升序)
bbb-->18
ccc-->20
aaa-->25
ddd-->45
二.内部元素实现Comparable接口的方式
1. 把Person类修改一下,让它实现Comparable接口:
package com.qdl.test;
public class Person implements Comparable
{
private String name;
private int age;
public Person(String name, int age){
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(Person p) {
//实现接口中的方法,定义排序规则
if(this.age return -1; //返回负整数
}else if(this.age>p.age){
return 1; //返回正整数
}else{
return 0; //返回0
}
}
}
2. 测试程序
package com.qdl.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test {
public static void main(String[] args) {
List
persons = new ArrayList();
persons.add(new Person("aaa",25));
persons.add(new Person("bbb",18));
persons.add(new Person("ccc",20));
persons.add(new Person("ddd",45));
//由于Person类实现了Comparable接口,所以使用Collections的sort()方法就能实现自动排序
//若是数组的话使用Arrays.sort(persons);
Collections.sort(persons);
for(Person p:persons){
System.out.println(p.getName()+"-->"+p.getAge());
}
}
}
输出结果为(按年龄升序)
bbb-->18
ccc-->20
aaa-->25
ddd-->45
可以看到两种方式都能达到排序目的,实现Comparable接口将比较代码嵌入自身类中,而自定义的比较器(Comparator)在一个独立的类中实现比较,如果设计类时没有考虑到compare的问题而没有实现Comparable接口,那么可以使用自定义的Comparator来实现排序,并且可以为了不同的排序标准做准备,如升序、降序等等。
阅读(778) | 评论(0) | 转发(0) |