java类自定义实现类排序实现(Comparable或者额外类实现Comparator)
2017-12-09 09:53
302 查看
1.自身类实现Comparable接口,重写public int compareTo(Object obj) {}方法
0 相等 正数 this > obj 负数 this < obj
然后加入到集合中,使用Collections.sort(list);调用即可
public class News implements Comparable {
private Date date;
private int number;
private String title;
public News() {}
public News(String title,int number,Date date) {
this.title = title;
this.number = number;
this.date = date;
}
public void setTitle(String title) {
this.title = title;
}
public String getTitle(String title) {
return this.title;
}
public void setNumber(int number) {
this.number = number;
}
public int getNumber() {
return this.number;
}
public void setDate(Date date) {
this.date = date;
}
public Date getDate() {
return this.date;
}
@Override
public int compareTo(News news) {
int result = 0;
result = this.date.compareTo(news.date);
//先按时间
if(result == 0) {
//点击量
result = -(this.number - news.number);
if(result == 0) {
//标题
result = -this.title.compareTo(news.title);
if(result == 0) {
return result;
} else {
return result;
}
} else {
return result;
}
} else {
return result;
}
}
@Override
public String toString() {
return title + " " + number + " " + date;
}
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
List list = new ArrayList();
list.add(new News("hj",100,new Date()));
list.add(new News("za",60,new Date(System.currentTimeMillis() - 10000)));
list.add(new News("lb",80,new Date(System.currentTimeMillis() + 10000)));
System.out.println("排序前");
for(News n : list) {
System.out.println(n);
}
Collections.sort(list);
System.out.println("排序后");
for(News n : list) {
System.out.println(n);
}
}
}
打印结果是:
排序前
hj 100 Fri Oct 27 09:25:32 CST 2017
za 60 Fri Oct 27 09:25:22 CST 2017
lb 80 Fri Oct 27 09:25:42 CST 2017
排序后
za 60 Fri Oct 27 09:25:22 CST 2017
hj 100 Fri Oct 27 09:25:32 CST 2017
lb 80 Fri Oct 27 09:25:42 CST 2017
2.使用额外的类来实现{}方法
好处:独立于实体类 便于应对各种规则
加入到集合中,用Collections.sort(list, new 比较类());
public class Goods {
private String name;
private int number;
public Goods() {}
public Goods(String name,int number) {
this.name = name;
this.number= number;
}
@Override
public String toString() {
return name + " " + number;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setNumber(int number) {
this.number = number;
}
public int getNumber() {
return this.number;
}
}
import java.util.Comparator;
public class SortGoods implements Comparator{
@Override
public int compare(Goods g1, Goods g2) {
//先按销量降序
int result = 0;
result = -(g1.getNumber() - g2.getNumber());
if(result == 0) {
//再按标题
result = -g1.getName().compareTo(g2.getName());
}
return result;
}
}
public class test {
public static void main(String[] args) {
List list = new ArrayList();
list.add(new Goods("zj",80));
list.add(new Goods("ajj",80));
list.add(new Goods("hjj",80));
list.add(new Goods("hjj",10));
System.out.println("排序前");
for(Goods g : list) {
System.out.println(g);
}
Collections.sort(list,new SortGoods());
System.out.println("排序后");
for(Goods g : list) {
System.out.println(g);
}
}
}
打印结果是:
排序前
zj 80
ajj 80
hjj 80
hjj 10
排序后
zj 80
hjj 80
ajj 80
hjj 10
0 相等 正数 this > obj 负数 this < obj
然后加入到集合中,使用Collections.sort(list);调用即可
public class News implements Comparable {
private Date date;
private int number;
private String title;
public News() {}
public News(String title,int number,Date date) {
this.title = title;
this.number = number;
this.date = date;
}
public void setTitle(String title) {
this.title = title;
}
public String getTitle(String title) {
return this.title;
}
public void setNumber(int number) {
this.number = number;
}
public int getNumber() {
return this.number;
}
public void setDate(Date date) {
this.date = date;
}
public Date getDate() {
return this.date;
}
@Override
public int compareTo(News news) {
int result = 0;
result = this.date.compareTo(news.date);
//先按时间
if(result == 0) {
//点击量
result = -(this.number - news.number);
if(result == 0) {
//标题
result = -this.title.compareTo(news.title);
if(result == 0) {
return result;
} else {
return result;
}
} else {
return result;
}
} else {
return result;
}
}
@Override
public String toString() {
return title + " " + number + " " + date;
}
}
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
List list = new ArrayList();
list.add(new News("hj",100,new Date()));
list.add(new News("za",60,new Date(System.currentTimeMillis() - 10000)));
list.add(new News("lb",80,new Date(System.currentTimeMillis() + 10000)));
System.out.println("排序前");
for(News n : list) {
System.out.println(n);
}
Collections.sort(list);
System.out.println("排序后");
for(News n : list) {
System.out.println(n);
}
}
}
打印结果是:
排序前
hj 100 Fri Oct 27 09:25:32 CST 2017
za 60 Fri Oct 27 09:25:22 CST 2017
lb 80 Fri Oct 27 09:25:42 CST 2017
排序后
za 60 Fri Oct 27 09:25:22 CST 2017
hj 100 Fri Oct 27 09:25:32 CST 2017
lb 80 Fri Oct 27 09:25:42 CST 2017
2.使用额外的类来实现{}方法
好处:独立于实体类 便于应对各种规则
加入到集合中,用Collections.sort(list, new 比较类());
public class Goods {
private String name;
private int number;
public Goods() {}
public Goods(String name,int number) {
this.name = name;
this.number= number;
}
@Override
public String toString() {
return name + " " + number;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setNumber(int number) {
this.number = number;
}
public int getNumber() {
return this.number;
}
}
import java.util.Comparator;
public class SortGoods implements Comparator{
@Override
public int compare(Goods g1, Goods g2) {
//先按销量降序
int result = 0;
result = -(g1.getNumber() - g2.getNumber());
if(result == 0) {
//再按标题
result = -g1.getName().compareTo(g2.getName());
}
return result;
}
}
public class test {
public static void main(String[] args) {
List list = new ArrayList();
list.add(new Goods("zj",80));
list.add(new Goods("ajj",80));
list.add(new Goods("hjj",80));
list.add(new Goods("hjj",10));
System.out.println("排序前");
for(Goods g : list) {
System.out.println(g);
}
Collections.sort(list,new SortGoods());
System.out.println("排序后");
for(Goods g : list) {
System.out.println(g);
}
}
}
打印结果是:
排序前
zj 80
ajj 80
hjj 80
hjj 10
排序后
zj 80
hjj 80
ajj 80
hjj 10
相关文章推荐
- Java编程之TreeSet排序两种解决方法(1)元素自身具备比较功能,元素需要实现Comparable接口覆盖compare(2)创建根据自定义Person类的name进行排序的Comparator
- JAVA中Arrays.sort()使用两种方式(Comparable和Comparator接口)对对象或者引用进行排序
- Java中使用Comparable和Comparator实现字段排序功能
- 使用Java中Comparator接口实现自定义排序
- java 第八篇 使用comparator实现自定义排序
- 使用Comparable、Comparator接口实现对对象数组、List集合自定义排序
- JAVA中Arrays.sort()使用两种方式(Comparable和Comparator接口)对对象或者引用进行排序
- java实现排序的方法-继承Comparable和Comparator
- JAVA中Arrays.sort()使用两种方式(Comparable和Comparator接口)对对象或者引用进行排序
- Java自定义实现Comparable接口的类,实现多维排序
- JAVA中Arrays.sort()使用两种方式(Comparable和Comparator接口)对对象或者引用进行排序
- Java中,如果想要排序,实现Comparator接口 //与Comparable 的区别?
- JAVA之旅(二十)—HashSet,自定义存储对象,TreeSet,二叉树,实现Comparator方式排序,TreeSet小练习
- java 数组比较,元素的比较,Comparable,Comparator比较的应用实现,排序,查找示例
- java中实现Comparable接口实现自定义排序的示例
- java中利用Comparator接口实现自定义排序技巧。
- JAVA 利用Comparator实现自定义排序
- Java数组排序中Comparator接口实现自定义排序
- 浅谈Java的Comparator接口实现自定义排序Arrays.sort()
- JAVA中Arrays.sort()使用两种方式(Comparable和Comparator接口)对对象或者引用进行排序