zoukankan      html  css  js  c++  java
  • Java对象排序

    java实现对象比较,可以实现java.lang.Comparable或java.util.Comparator接口

    Code:
    1. //Product.java
    2. import java.util.Date;   
    3.   
    4. //public class Product implements Comparable {//类内比较   
    5. public class Product{   
    6.   
    7.     private String name;   
    8.     private Date date;   
    9.     private int price;   
    10.        
    11.     public int getPrice() {   
    12.         return price;   
    13.     }   
    14.     public void setPrice(int price) {   
    15.         this.price = price;   
    16.     }   
    17.     public String getName() {   
    18.         return name;   
    19.     }   
    20.     public void setName(String name) {   
    21.         this.name = name;   
    22.     }   
    23.     public Date getDate() {   
    24.         return date;   
    25.     }   
    26.     public void setDate(Date date) {   
    27.         this.date = date;   
    28.     }   
    29. //用于类内比较
    30. //  @Override//覆写compareTo(Object o)方法   
    31. //  public int compareTo(Product o) {   
    32. //      return -this.date.compareTo(o.date);   
    33. //  }   
    34.        
    35. }  
    Code:
    1. //ProductComparable.java   
    2.   
    3. import java.util.Date;   
    4. import java.util.Comparator;   
    5.   
    6. public class ProductComparable implements Comparator<Product> {   
    7.   
    8.     // 对象的排序方式[升、降]   
    9.     public static boolean sortASC = true;   
    10.   
    11.     // 对象的排序属性   
    12.     public static boolean sortByName = false;   
    13.     public static boolean sortByDate = false;   
    14.     public static boolean sortByPrice = false;   
    15.   
    16.        
    17.     @Override  
    18.     public int compare(Product pro1, Product pro2) {   
    19.   
    20.         int result = 0;   
    21.            
    22.         if(sortASC){   
    23.             if(sortByName){   
    24.                 String pro1name = pro1.getName();   
    25.                 String pro2name = pro2.getName();   
    26.                 result = pro1name.compareTo(pro2name);   
    27.             }else if(sortByDate){   
    28.                 Date pro1Date = pro1.getDate();   
    29.                 Date pro2Date = pro2.getDate();   
    30.                    
    31.                 result = pro1Date.compareTo(pro2Date);   
    32.                    
    33.             }else if(sortByPrice){   
    34.                 Integer pro1Price = pro1.getPrice();   
    35.                 Integer pro2Price = pro2.getPrice();   
    36.                    
    37.                 result = pro1Price.compareTo(pro2Price);   
    38.             }   
    39.         }else{   
    40.             if(sortByName){   
    41.                 String pro1name = pro1.getName();   
    42.                 String pro2name = pro2.getName();   
    43.                    
    44.                 result =  -pro1name.compareTo(pro2name);   
    45.             }else if(sortByDate){   
    46.                 Date pro1Date = pro1.getDate();   
    47.                 Date pro2Date = pro2.getDate();   
    48.                    
    49.                 result =  -pro1Date.compareTo(pro2Date);   
    50.                    
    51.             }else if(sortByPrice){   
    52.                 Integer pro1Price = pro1.getPrice();   
    53.                 Integer pro2Price = pro2.getPrice();   
    54.                    
    55.                 result =  -pro1Price.compareTo(pro2Price);   
    56.             }   
    57.         }   
    58.         return result;   
    59.     }   
    60.   
    61. }  
    Code:
    1. //测试代码   
    2.   
    3. import java.text.ParseException;   
    4. import java.text.SimpleDateFormat;   
    5. import java.util.ArrayList;   
    6. import java.util.Collections;   
    7. import java.util.Iterator;   
    8. import java.util.List;   
    9. import java.util.Locale;   
    10.   
    11. public class ProductSort {   
    12.   
    13.     public static void main(String[] args) throws ParseException {   
    14.         Product pro1 = new Product();   
    15.         pro1.setName("pro1");   
    16.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-dd-MM",Locale.CHINA);   
    17.         pro1.setDate(sdf.parse("2009-03-23"));   
    18.         pro1.setPrice(89);   
    19.         Product pro2 = new Product();   
    20.         pro2.setName("proc2");   
    21.         pro2.setDate(sdf.parse("2009-02-23"));   
    22.         pro2.setPrice(45);   
    23.         Product pro3 = new Product();   
    24.         pro3.setName("proc3");   
    25.         pro3.setDate(sdf.parse("2009-01-23"));   
    26.         pro3.setPrice(83);   
    27.         Product pro4 = new Product();   
    28.         pro4.setName("proc4");   
    29.         pro4.setDate(sdf.parse("2009-01-23"));   
    30.         pro4.setPrice(800);   
    31.            
    32.            
    33.         List<Product> productList = new ArrayList<Product>();   
    34.         productList.add(pro1);   
    35.         productList.add(pro3);   
    36.         productList.add(pro2);   
    37.         productList.add(pro4);   
    38.            
    39.         System.out.println("排序前————————————————————");   
    40.         for(Product p: productList){   
    41.             System.out.println(p.getName()+"----"+p.getPrice()+"----"+p.getDate());   
    42.         }   
    43.         ProductComparable sort = new ProductComparable();   
    44.            
    45.         ProductComparable.sortASC = false;//降序   
    46.         ProductComparable.sortByPrice=true;  //设置排序属性生效 
    47.         Collections.sort(productList,sort);   
    48.            
    49.         System.out.println("排序后————————————————————");   
    50.            
    51.         for(Iterator<Product>  iter = productList.iterator(); iter.hasNext();){   
    52.             Product p = (Product)iter.next();   
    53.             System.out.println(p.getName()+"----"+p.getPrice()+"---"+p.getDate());   
    54.         }   
    55.     }   
    56. }  

     推荐使用Comparator实现排序

    因为 你用一个第三方的类,但他没实现Comparable接口,而你又不能改他代码;另外,类一旦写好后是不允许修改的,但可以扩展,所以只能用Comparator接口

    java实现对象比较,可以实现java.lang.Comparable或java.util.Comparator接口

    Code:
    1. //Product.java
    2. import java.util.Date;   
    3.   
    4. //public class Product implements Comparable {//类内比较   
    5. public class Product{   
    6.   
    7.     private String name;   
    8.     private Date date;   
    9.     private int price;   
    10.        
    11.     public int getPrice() {   
    12.         return price;   
    13.     }   
    14.     public void setPrice(int price) {   
    15.         this.price = price;   
    16.     }   
    17.     public String getName() {   
    18.         return name;   
    19.     }   
    20.     public void setName(String name) {   
    21.         this.name = name;   
    22.     }   
    23.     public Date getDate() {   
    24.         return date;   
    25.     }   
    26.     public void setDate(Date date) {   
    27.         this.date = date;   
    28.     }   
    29. //用于类内比较
    30. //  @Override//覆写compareTo(Object o)方法   
    31. //  public int compareTo(Product o) {   
    32. //      return -this.date.compareTo(o.date);   
    33. //  }   
    34.        
    35. }  
    Code:
    1. //ProductComparable.java   
    2.   
    3. import java.util.Date;   
    4. import java.util.Comparator;   
    5.   
    6. public class ProductComparable implements Comparator<Product> {   
    7.   
    8.     // 对象的排序方式[升、降]   
    9.     public static boolean sortASC = true;   
    10.   
    11.     // 对象的排序属性   
    12.     public static boolean sortByName = false;   
    13.     public static boolean sortByDate = false;   
    14.     public static boolean sortByPrice = false;   
    15.   
    16.        
    17.     @Override  
    18.     public int compare(Product pro1, Product pro2) {   
    19.   
    20.         int result = 0;   
    21.            
    22.         if(sortASC){   
    23.             if(sortByName){   
    24.                 String pro1name = pro1.getName();   
    25.                 String pro2name = pro2.getName();   
    26.                 result = pro1name.compareTo(pro2name);   
    27.             }else if(sortByDate){   
    28.                 Date pro1Date = pro1.getDate();   
    29.                 Date pro2Date = pro2.getDate();   
    30.                    
    31.                 result = pro1Date.compareTo(pro2Date);   
    32.                    
    33.             }else if(sortByPrice){   
    34.                 Integer pro1Price = pro1.getPrice();   
    35.                 Integer pro2Price = pro2.getPrice();   
    36.                    
    37.                 result = pro1Price.compareTo(pro2Price);   
    38.             }   
    39.         }else{   
    40.             if(sortByName){   
    41.                 String pro1name = pro1.getName();   
    42.                 String pro2name = pro2.getName();   
    43.                    
    44.                 result =  -pro1name.compareTo(pro2name);   
    45.             }else if(sortByDate){   
    46.                 Date pro1Date = pro1.getDate();   
    47.                 Date pro2Date = pro2.getDate();   
    48.                    
    49.                 result =  -pro1Date.compareTo(pro2Date);   
    50.                    
    51.             }else if(sortByPrice){   
    52.                 Integer pro1Price = pro1.getPrice();   
    53.                 Integer pro2Price = pro2.getPrice();   
    54.                    
    55.                 result =  -pro1Price.compareTo(pro2Price);   
    56.             }   
    57.         }   
    58.         return result;   
    59.     }   
    60.   
    61. }  
    Code:
    1. //测试代码   
    2.   
    3. import java.text.ParseException;   
    4. import java.text.SimpleDateFormat;   
    5. import java.util.ArrayList;   
    6. import java.util.Collections;   
    7. import java.util.Iterator;   
    8. import java.util.List;   
    9. import java.util.Locale;   
    10.   
    11. public class ProductSort {   
    12.   
    13.     public static void main(String[] args) throws ParseException {   
    14.         Product pro1 = new Product();   
    15.         pro1.setName("pro1");   
    16.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-dd-MM",Locale.CHINA);   
    17.         pro1.setDate(sdf.parse("2009-03-23"));   
    18.         pro1.setPrice(89);   
    19.         Product pro2 = new Product();   
    20.         pro2.setName("proc2");   
    21.         pro2.setDate(sdf.parse("2009-02-23"));   
    22.         pro2.setPrice(45);   
    23.         Product pro3 = new Product();   
    24.         pro3.setName("proc3");   
    25.         pro3.setDate(sdf.parse("2009-01-23"));   
    26.         pro3.setPrice(83);   
    27.         Product pro4 = new Product();   
    28.         pro4.setName("proc4");   
    29.         pro4.setDate(sdf.parse("2009-01-23"));   
    30.         pro4.setPrice(800);   
    31.            
    32.            
    33.         List<Product> productList = new ArrayList<Product>();   
    34.         productList.add(pro1);   
    35.         productList.add(pro3);   
    36.         productList.add(pro2);   
    37.         productList.add(pro4);   
    38.            
    39.         System.out.println("排序前————————————————————");   
    40.         for(Product p: productList){   
    41.             System.out.println(p.getName()+"----"+p.getPrice()+"----"+p.getDate());   
    42.         }   
    43.         ProductComparable sort = new ProductComparable();   
    44.            
    45.         ProductComparable.sortASC = false;//降序   
    46.         ProductComparable.sortByPrice=true;  //设置排序属性生效 
    47.         Collections.sort(productList,sort);   
    48.            
    49.         System.out.println("排序后————————————————————");   
    50.            
    51.         for(Iterator<Product>  iter = productList.iterator(); iter.hasNext();){   
    52.             Product p = (Product)iter.next();   
    53.             System.out.println(p.getName()+"----"+p.getPrice()+"---"+p.getDate());   
    54.         }   
    55.     }   
    56. }  

     推荐使用Comparator实现排序

    因为 你用一个第三方的类,但他没实现Comparable接口,而你又不能改他代码;另外,类一旦写好后是不允许修改的,但可以扩展,所以只能用Comparator接口

  • 相关阅读:
    CSS练习
    大作业“抽屉页面”html+css
    html练习代码
    协程-基于TCP的高并发通信
    协程-爬虫示例
    互斥锁,递归锁,信号量
    三层架构(我的理解及详细分析)
    递归算法经典实例小结(C#实现)
    使用XmlWriter写Xml
    使用XmlReader读Xml
  • 原文地址:https://www.cnblogs.com/ctaixw/p/5268755.html
Copyright © 2011-2022 走看看