Chinaunix首页 | 论坛 | 博客
  • 博客访问: 369637
  • 博文数量: 100
  • 博客积分: 2586
  • 博客等级: 少校
  • 技术积分: 829
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-09 15:20
个人简介

我是一个Java爱好者

文章分类

全部博文(100)

文章存档

2014年(2)

2013年(7)

2012年(2)

2010年(44)

2009年(28)

2008年(17)

我的朋友

分类: Java

2010-08-30 10:36:28

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);
  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) |
给主人留下些什么吧!~~