天天看点

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);
        }
    }

}