📅  最后修改于: 2023-12-03 15:22:18.695000             🧑  作者: Mango
在Java中,我们可以使用Comparable
和Comparator
来对对象进行排序。Comparable
接口是一个对象自身与其他对象进行比较的方法,而Comparator
接口是一个独立的比较器,用于比较两个不相干的对象。
在本篇文章中,我们将介绍如何使用Comparable
和Comparator
对Triplet
数组进行排序。
public class Triplet implements Comparable<Triplet> {
private int a;
private int b;
private int c;
public Triplet(int a, int b, int c) {
this.a = a;
this.b = b;
this.c = c;
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
public int getC() {
return c;
}
public void setC(int c) {
this.c = c;
}
@Override
public int compareTo(Triplet o) {
if (this.a != o.a) {
return this.a - o.a;
} else if (this.b != o.b) {
return this.b - o.b;
} else {
return this.c - o.c;
}
}
}
Triplet
类表示一个由三个整数组成的三元组,实现了Comparable
接口以支持自己和其他对象的比较。重写compareTo
方法根据a
、b
和c
的值来比较Triplet
对象。
public static void main(String[] args) {
Triplet[] triplets = {new Triplet(3, 2, 1), new Triplet(1, 2, 3), new Triplet(2, 3, 1)};
Arrays.sort(triplets);
for (Triplet triplet : triplets) {
System.out.println(triplet.getA() + " " + triplet.getB() + " " + triplet.getC());
}
}
下面是输出结果:
1 2 3
2 3 1
3 2 1
使用Arrays.sort
方法对Triplets
数组进行排序,结果按a
、b
、c
的顺序排列。
public static void main(String[] args) {
Triplet[] triplets = {new Triplet(3, 2, 1), new Triplet(1, 2, 3), new Triplet(2, 3, 1)};
Comparator<Triplet> comparator = new Comparator<Triplet>() {
@Override
public int compare(Triplet o1, Triplet o2) {
if (o1.getC() != o2.getC()) {
return o1.getC() - o2.getC();
} else if (o1.getB() != o2.getB()) {
return o1.getB() - o2.getB();
} else {
return o1.getA() - o2.getA();
}
}
};
Arrays.sort(triplets, comparator);
for (Triplet triplet : triplets) {
System.out.println(triplet.getA() + " " + triplet.getB() + " " + triplet.getC());
}
}
下面是输出结果:
3 2 1
2 3 1
1 2 3
在上面的例子中,我们创建了一个Comparator
匿名类对象并重写了compare
方法,该方法指定了按c
、b
、a
的顺序进行排序。然后,我们使用该比较器对Triplets
数组进行排序。
使用Comparable
和Comparator
可以很容易地对对象进行排序。在本篇文章中,我们展示了如何使用Comparable
和Comparator
对Triplet
数组进行排序。请注意,使用Comparable
进行排序是对某个特定的类进行排序,而使用Comparator
进行排序可能会对多个类进行排序。