1 import java.util.TreeSet; 2 3 4 /** 5 * PriorityQueue, TreeSet是排序集合,存储的对象必须实现Comparable接口。 6 * 原因是: Comparable 接口定义了compareTo()方法,它判断类的对象的“自然顺序”。 7 * 如何能将Comparable用来定义对象的自然顺序,以便对象能保存到排序集合中。 8 * 为一个类实现Comparable时,通常应当遵守一个规则:compareTo()的输出必须与equals()的输出一致。 9 * 对每一个equals()返回true的情况,compareTo()都必须返回0. 10 * @author Administrator 11 * 12 */ 13 14 class CompDemo { 15 public static void main(String[] args) { 16 TreeSet<Product> prodList = new TreeSet<Product>(); 17 18 prodList.add(new Product("Shelf", 13546)); 19 prodList.add(new Product("Keyboard tray", 04762)); 20 prodList.add(new Product("Desk", 12221)); 21 prodList.add(new Product("File Cabinet", 44387)); 22 23 System.out.println("Prodects sorted by name:\n"); 24 for(Product p:prodList){ 25 System.out.printf("%-14s ID: %d\n", p.prodName, p.prodID); 26 } 27 } 28 } 29 30 class Product implements Comparable<Product>{ 31 32 String prodName; 33 int prodID; 34 35 public Product(String prodName, int prodID) { 36 this.prodName = prodName; 37 this.prodID = prodID; 38 } 39 40 @Override 41 public int compareTo(Product o) { 42 return prodName.compareToIgnoreCase(o.prodName); 43 } 44 45 @Override 46 public boolean equals(Object obj) { 47 return prodName.compareToIgnoreCase(((Product)obj).prodName) == 0; 48 } 49 50 51 }