天天看點

java多位排序

java多位排序

- 問題:java多位排序,有一對象裡有多個資料,按Data降序,num降序,sort升序,collections升序排列。

  • Comparator及Comparable差別及使用
  • 方法:采用Comparator接口,實作裡面的

    public int compare(T t1,T t2)

    {//比較方式}

    • #### 注意:在進行對象比較的時候,用 對象.compareTo() 方法時會調用兩個方法進行,boolean equals(T t)和int hashcode()。系統預設的equals(T t)為兩個對象位址的比較,位址相同則相等,而實際應用中可能隻需要對象中數字相等即可,是以要重寫equals(T t)函數,裡面寫所需的數字比較。每一個對象都有自己對應的hashcode(),但因為底層算法實作的原因,可能相同數字的對象擁有不同的hashcode(),為了避免這種現象的發生,可以自己編寫hashcode()方法,将每個對象的hashcode()重寫,相同數字對象擁有相同的hashcode(),認為是同一資料。
    • equals()和hashcode()作用詳解
//采用Comparator<T>接口,compare函數。代碼如下:
public class ArticleCompare implements Comparator<Article> {

    public int  compare(Article art1,Article art2)
    {

        if(art1 == null || art2 == null)
            return ;
        String dateTime1 = art1.getDateTime();
        String dateTime2 = art2.getDateTime();
        return dateTime1.compareTo(dateTime2) >  ? - :;
        }
        else if(art1.getNum() != art2.getNum())
        {
            return art1.getNum() > art2.getNum() ? -:;
        }
        else if(art1.getSort() != art2.getSort())
        {
            return art1.getSort() > art2.getSort() ? :-;
        }
        else {
            String classification1 = art1.getClassification();
            String classification2 = art2.getClassification();
            return classification1.compareTo(classification2);
        }
    }
}
           
//按照類裡得資料進行相應排序
public class Article {
    private String title;
    private String dateTime;
    public int num;
    private int sort;
    private String classification;

    public Article(String title,String dataTime,int num, int sort, String classification)
    {
        this.title = title;
        this.dateTime = dataTime;
        this.num = num;
        this.sort = sort;
        this.classification = classification;
    }
    public String getTitle() {
        return title;
    }

    public String getDateTime() {
        return dateTime;
    }

    public int getNum() {
        return num;
    }

    public int getSort() {
        return sort;
    }

    public String getClassification() {
        return classification;
    }
    public boolean equals(Article art)
    {
        if((this.title.compareTo(art.title)==) && (this.dateTime.compareTo(art.dateTime)==) );
                return true;
    }
    public int hashcode()
    {
        int hash = this.hashCode();
        return hash^this.num;
    }

    @Override
    public String toString() {
        return String.format("%s\t\t%d\t\t%d\t\t%s\t\t%s",this.getDateTime(),this.getNum(),this.getSort(),this.getClassification(),this.getTitle());//輸出對象時,實為調用輸出toString()函數,可通過改寫toString()函數輸出所需變量。
    }
}
           
//添加所需對象
public class SortText {
    public  void sort()
    {
        Article art1,art2;
        List<Article> array = new ArrayList<Article>();
        {
            array.add(new Article("yueyue","2017.6.1",,,"white"));
            array.add(new Article("yueyue","2017.7.1",,,"white"));
            array.add(new Article("yueyue","2017.7.1",,,"white"));
            array.add(new Article("yueyue","2017.7.1",,,"white"));
            array.add(new Article("yueyue","2017.7.1",,,"black"));
            array.add(new Article("sunny","2017.6.1",,,"white"));
        }

        Collections.sort(array,new ArticleCompare());//采用Collections.sort()進行排序,第二個參數為排序的規則。
        System.out.println("Date   "+"       num         "+"sort      "+"classification     "+"title  ");
        System.out.println("         |          |          |            |                  ");
        for(Article article:array)
        {
            System.out.println(article);
        }
    }

}