有两种比较元素的方法:
- 集合的元素实现Comparable接口,并实现compareTo方法。
然后由Collections类调用sort方法,将集合作为参数传入sort()。 - 单独创建一个比较器类,实现Comparator接口,并实现其中的compare方法。
然后集合调用自身的sort()方法,并将比较器类的实例作为参数传入sort()方法,实现排序。
package com.Collection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
public class TestCollection {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Test> arrayList = new ArrayList<Test>();
Test test1 = new Test(1);
Test test2 = new Test(2);
Test test3 = new Test(3);
arrayList.add(test1);
arrayList.add(test3);
arrayList.add(test2);
print(arrayList);
/*
* 排序方法1:元素类实现Comparable接口中的compareTo方法
* 由Collections调用sort方法排序
*/
Collections.sort(arrayList);
/*
* 排序方法2:单独创建一个类,实现Comparator接口中的compare方法
* 由线性表调用自身的sort方法排序
*/
TestComparator comparator = new TestComparator();
arrayList.sort(comparator);
print(arrayList);
}
private static void print(ArrayList<Test> arrayList) {
// TODO Auto-generated method stub
Iterator<Test> it = arrayList.iterator();
while (it.hasNext()) {
Test test = it.next();
System.out.println(test.getValue());
}
}
}
class Test implements Comparable<Test> {
private int value;
public Test(int value) {
// TODO Auto-generated constructor stub
this.value = value;
}
public int getValue() {
return this.value;
}
@Override
public int compareTo(Test o) {
// TODO Auto-generated method stub
return this.value - o.getValue();
}
}
class TestComparator implements Comparator<Test> {
@Override
public int compare(Test o1, Test o2) {
// TODO Auto-generated method stub
return o1.getValue() - o2.getValue();
}
}