Java Arraylist 如何使用 Comparator排序

2025-04-15 07:58:09
推荐回答(2个)
回答1:

用Comparator是策略模式(strategy design pattern),就是不改变对象自身,而用一个策略对象(strategy object)来改变它的行为。
比如:你想对整数采用绝对大小来排序,Integer是不符合要求的,你不需要去修改Integer类(实际上你也不能这么做)去改变它的排序行为,只要使用一个实现了Comparator接口的对象来实现控制它的排序就行了。

示例代码如下:

//AbsComparator.java
import java.util.*;
public class AbsComparator implements Comparator {
public int compare(Object o1, Object o2) {
int v1 = Math.abs(((Integer)o1).intValue());
int v2 = Math.abs(((Integer)o2).intValue());
return v1 > v2 ? 1 : (v1 == v2 ? 0 : -1);
}
}

//Test.java
import java.util.*;
public class Test {
public static void main(String[] args) {

//产生一个20个随机整数的数组(有正有负)
Random rnd = new Random();
Integer[] integers = new Integer[20];
for(int i = 0; i < integers.length; i++)
integers[i] = new Integer(rnd.nextInt(100) * (rnd.nextBoolean() ? 1 : -1));

System.out.println("用Integer内置方法排序:");
Arrays.sort(integers);
System.out.println(Arrays.asList(integers));

System.out.println("用AbsComparator排序:");
Arrays.sort(integers, new AbsComparator());
System.out.println(Arrays.asList(integers));
}
}

回答2:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class Sort implements Comparator {
private final static int UP = 1;

private final static int DOWM = -1;

private int state;

public Sort(int state) {
this.state = state;
}

public Sort() {

}

public int compare(String o1, String o2) {
if (state == Sort.DOWM) {
return sortDown(o1, o2);
}
return sortUp(o1, o2);
}

private int sortUp(String o1, String o2) {
if (o1.compareTo(o2) < 0) {
return -1;
} else if (o1.compareTo(o2) > 0) {
return 1;
} else {
return 0;
}
}

private int sortDown(String o1, String o2) {
if (o1.compareTo(o2) > 0) {
return -1;
} else if (o1.compareTo(o2) < 0) {
return 1;
} else {
return 0;
}
}

public static void main(String[] args) {
ArrayList array = new ArrayList();
array.add("000001");
array.add("000003");
array.add("000005");
array.add("000004");
array.add("000002");
Collections.sort(array, new Sort(Sort.DOWM));

for (String str : array) {
System.out.println(str);
}
}
}