- Arrays.sort()方法对引用类型(对象)排序有两种方法:
继承Comparable接口并实现compareTo方法
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
Man[] msMans = { new Man(3, "a"), new Man(60, "b"), new Man(2, "c") };
Arrays.sort(msMans);
System.out.println(Arrays.toString(msMans));
}
}
@Data//自动生成getset方法
class Man implements Comparable {
int age;
int id;
String name;
public int compareTo(Object o) {
Man man = (Man) o;
if (this.age < man.age) {
return -1;
}
if (this.age > man.age) {
return 1;
}
return 0;
}
}
重写Comparator比较器的compare方法
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
Man[] msMans = { new Man(3, "a"), new Man(60, "b"), new Man(2, "c") };
Arrays.sort(Man, new Comparator<Man>() {
@SneakyThrows
@Override
public int compare(Man m1, Man m2) {
if (m1.age < m2.age) {
return -1;
}
if (m1.age > m2.age) {
return 1;
}
return 0;
}
});
System.out.println(Arrays.toString(msMans));
}
}
区别
-
comparable在对象类中实现,comparator则在调用时实现;
-
comparable实现一次就可以多次使用,comparator则每次调用都需要实现,所以comparator比comparable更灵活,而comparable对代码的复用率更高。在某些场景下,可以使用comparable定义一个默认的排序规则,特殊情况则使用comparator实现一个特定情况下使用的排序规则;
List和Array互转:
Man[] manArray = manList.toArray(new Man[manList.size()]); List<Man> manList = Arrays.asList(manArray);
排序还可以使用Collection的排序,eg:
List<Man> manList = manList.stream().sorted(Comparator.comparing(Man::getAge)).collect(Collectors.toList());