版权声明: https://blog.csdn.net/qq_29166327/article/details/82878041
2018年09月28日
目录
2.1 新建类 Age.java ,implements 接口,重写compareTo() 方法:
2.2 测试Demo:ComparableTest.java
4.1 新建比较器类AgeComparator,实现 Comparator接口,重写compare()方法:
4.2 测试Demo:ComparatorTest.java
1.Comparable接口的概念
此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 。实现此接口的对象列表(和数组)可以通过 Collections.sort (和 Arrays.sort )进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。
2、Comparable接口使用
2.1 新建类 Age.java ,implements 接口,重写compareTo() 方法:
class Age implements Comparable<Age>{
private int num ;
public Age(int num) {
super();
this.num = num;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
@Override
public int compareTo(Age o) {
//逆序还是降序,只要把两者的属性进行相减位置调换即可;
//-1 0 1 如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
// return this.num - o.getNum(); //升序
return o.getNum() - this.num ;//降序 (主动权在下一个,结果>0,排前面;<0,排后面;)
}
}
2.2 测试Demo:ComparableTest.java
public class ComparableTest {
public static void main(String[] args) {
Age[] ageList = new Age[]{new Age(4),new Age(3),new Age(2),new Age(1)};
System.out.println("1: "+getList(ageList));
Arrays.sort(ageList);
System.out.println("2: "+getList(ageList));
}
private static String getList(Age[] ageList){
StringBuffer stringBuffer = new StringBuffer();
//根据数组的长度创建一个长度相同的List,
//然后通过Collections.addAll()方法,将数组中的元素转为二进制,
//然后添加到List中,这是最高效的方法。
List<Age> arrayList = new ArrayList<Age>(ageList.length);
Collections.addAll(arrayList, ageList);
for(Age age : arrayList){
stringBuffer.append(String.valueOf(age.getNum()+" "));
}
return stringBuffer.toString();
}
}
输出结果:
【逆序】
1: 4 3 2 1
2: 4 3 2 1
【升序】
1: 4 3 2 1
2: 1 2 3 4
3、Comparator 接口的概念
对任意类型集合对象进行整体排序,排序时将此接口的实现传递给Collections.sort方法或者Arrays.sort方法排序.
实现int compare(T o1, T o2);方法,返回正数,零,负数各代表大于,等于,小于。
4、Comparator接口的使用
4.1 新建比较器类AgeComparator,实现 Comparator接口,重写compare()方法:
class AgeComparator implements Comparator<Age>{
@Override
public int compare(Age o1, Age o2) {
// return o1.getNum() - o2.getNum(); //升序
return o2.getNum() - o1.getNum(); //逆序
}
}
4.2 测试Demo:ComparatorTest.java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class ComparatorTest {
public static void main(String[] args) {
Age[] ageList = new Age[]{new Age(4),new Age(3),new Age(2),new Age(1)};
System.out.println("1: "+getList(ageList));
Arrays.sort(ageList, new AgeComparator());
System.out.println("2: "+getList(ageList));
}
private static String getList(Age[] ageList){
StringBuffer stringBuffer = new StringBuffer();
//根据数组的长度创建一个长度相同的List,
//然后通过Collections.addAll()方法,将数组中的元素转为二进制,
//然后添加到List中,这是最高效的方法。
List<Age> arrayList = new ArrayList<Age>(ageList.length);
Collections.addAll(arrayList, ageList);
for(Age age : arrayList){
stringBuffer.append(String.valueOf(age.getNum()+" "));
}
return stringBuffer.toString();
}
}
输出结果:
1、升序:
1: 4 3 2 1
2: 1 2 3 4
2、逆序:
1: 4 3 2 1
2: 4 3 2 1