文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Java集合的排序

Java集合的排序

时间:2010-08-30  来源:qdl2010

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<Person> {  //定义一些排序规则  public int compare(Person p1, Person p2) {
  if(p1.getAge()<p2.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<Person> persons = new ArrayList<Person>();
  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<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;
 }
 
 public int compareTo(Person p) {
  //实现接口中的方法,定义排序规则
  if(this.age<p.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<Person> persons = new ArrayList<Person>();
  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来实现排序,并且可以为了不同的排序标准做准备,如升序、降序等等。
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载