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