胜利油田第一中学老师:Java中集合排序 | 天狼星技术博客

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 01:02:08
Java中集合排序发表于:2010年09月23日 分类:Java 评论关闭  

下面介绍下对集合进行自定义的排序,因为很多情况下,集合中的数据保存的都是类对象,我们要对集合进行排序,换句话讲就是根据类中定义的属性对类进行排序。。。Java中对类进行排序处理,满足两个要求,1:实现Comparable接口,实现public intcompareTo(Object o)方法就OK了,这个compareTo方法返回值是个int类型,若大于0则表示按升序,0表示类对象大小相同,小于0则表示类对像按降序排列了;

我们举例说明:

查看源代码打印帮助 001 package com; 002 import java.text.ParseException; 003 import java.text.SimpleDateFormat; 004 import java.util.ArrayList; 005 import java.util.Arrays; 006 import java.util.Date; 007 import java.util.List; 008   009 public class Book implements Comparable { 010  // 对象的排序方式[升、降] 011  private static boolean sortASC = true; 012  // 对象的排序属性 013  private static boolean sortBybId = false; 014  private static boolean sortBybName = false; 015  private static boolean sortBybDate = false; 016 //类属性 017  private int bId; 018  private String bName; 019  private Date bDate; 020   021 //构造方法 022  public Book(int id, String name, Date date) { 023      super(); 024      bId = id; 025      bName = name; 026      bDate = date; 027  } 028   029 //必须实现的方法 030  public int compareTo(Book book) { 031   if (sortBybId) { 032        if (sortASC) 033               return this.bId > book.bId ? 1 : this.bId == book.bId ? 0 : -1; 034        else 035               return this.bId > book.bId ? -1 : this.bId == book.bId ? 0 : 1; 036   } else if (sortBybName) { 037         if (sortASC) { 038              int result = this.bName.compareTo(book.bName); 039              return result; 040         } else { 041            int result = this.bName.compareTo(book.bName); 042           return result > 0 ? -1 : result == 0 ? result : 1; 043        } 044   } else if (sortBybDate) { 045        if (sortASC) { 046             int result = this.bDate.compareTo(book.bDate); 047             return result; 048       } else { 049             int result = this.bDate.compareTo(book.bDate); 050             return result > 0 ? -1 : result == 0 ? result : 1; 051       } 052    } 053         return 1;  //默认返回值; 054  } 055   056 //测试 057  public static void main(String[] args) throws ParseException { 058       List lst = new ArrayList(); 059       SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); 060       lst.add(new Book(1, "aaa",sdf.parse("2001-1-1"))); 061       lst.add(new Book(4, "fff",sdf.parse("2001-10-5"))); 062       lst.add(new Book(3, "zzzz",sdf.parse("2001-2-1"))); 063   064     //我想按对象的编号升序排列 065     // Book.sortASC=true; 066     // Book.sortBybId=true; 067   068      //我想按对象的编号降序排列 069      // Book.sortASC=false; 070     // Book.sortBybId=true; 071   072     //我想按对象的姓名降序排列 073     // Book.sortASC=false; 074     // Book.sortBybName=true; 075   076    // 我想按对象的时间降序排列 077     Book.sortASC=false; 078     Book.sortBybDate=true; 079   080     Book[] book = lst.toArray(new Book[] {}); 081     Arrays.sort(book);    //开发循环调用compareTo方法 082     lst = Arrays.asList(book); 083   084    //排序后输出 085     for (Book b : lst) { 086       System.out.println("bid==" + b.bId + "  bName==" + b.bName); 087    } 088   089   //排序属性值恢复 090   Book.sortBybId = false; 091   Book.sortBybName = false; 092   Book.sortBybDate = false; 093   094   // Book[] book = new Book[] { new Book(4, "aaa"), new Book(3, "bbb") }; 095   // for (Book book2 : book) { 096   // System.out.println("bid==" + book2.bId + " bName==" + book2.bName); 097   // } 098   // Arrays.sort(book); 099   // for (Book book2 : book) { 100   // System.out.println("bid==" + book2.bId + " bName==" + book2.bName); 101   // } 102  } 103 }