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