1.定义:Comparator是外部比较器,用于比较来对象与对象之间的,两个对象进行比较,多用于集合排序,而Comparable可以认为是一个内比较器,根据对象某一属性进行排序的
2.使用方法
1)定义节点信息
class Node{
int x;
int y;
Node(int x,int y){
this.x=x;
this.y=y;
}
@Override
public String toString() {
return "Node{" +
"x=" + x +
", y=" + y +
'}';
}
}
2)比较器方法
Collections.sort(list, new Comparator<Node>() {
/**o1-o2为升序序排列,o2-o1为降序排列,若具体到某一字段,则根据该字段进行排列*/
@Override
public int compare(Node o1, Node o2) {
if (o1.x==o2.x) //若x属性相等,根据y来升序
return o1.y-o2.y;
return o1.x-o2.x;//x属性不相等,根据x来升序排列
}
});
3)完整代码
import java.util.*;
class Node{
int x;
int y;
Node(int x,int y){
this.x=x;
this.y=y;
}
@Override
public String toString() {
return "Node{" +
"x=" + x +
", y=" + y +
'}';
}
}
public class Main {
public static void way(int num[],int n){
}
public static void main(String[] args) {
Node node4=new Node(2,2);
Node node3=new Node(2,1);
Node node1=new Node(1,2);
Node node2=new Node(1,1);
Node node5=new Node(3,1);
Node node6=new Node(3,2);
ArrayList<Node> list=new ArrayList<>();
list.add(node1);
list.add(node2);
list.add(node3);
list.add(node4);
list.add(node5);
list.add(node6);
Collections.sort(list, new Comparator<Node>() {
/**o1-o2为升序序排列,o2-o1为降序排列,若具体到某一字段,则根据该字段进行排列*/
@Override
public int compare(Node o1, Node o2) {
if (o1.x==o2.x) //若x属性相等,根据y来升序
return o1.y-o2.y;
return o1.x-o2.x;//x属性不相等,根据x来升序排列
}
});
for (Node node:list
) {
System.out.println(node.toString());
}
}
}
3.结果如下