Question 0 Compartor小练习
class MyNode {
int A;
String B;
char C;
int D;
long E;
short F;
boolean G;
}
规则:
先比较A,谁小谁优先
A一样比B,B字母序列谁大谁优先,B一样大的时候,B的长度越短越优先,都一样的话
都一样的话比较C,C离char “a” asc码越近越优先
不然比D和E相加的结果(默认不会超界),相加的结果越大越优先,
不然我们比F,F越小越优先
如果前面都一样,比G,true优先,如果到这都一样,这两Node一样优先
不合理的地方:
B字母序列谁大谁优先,B一样大的时候,B的长度越短越优先
字母序一样的时候,长度一样是一样的,找不到字母序列,长度不一样的case
class MyNode {
int A;
String B;
char C;
int D;
long E;
short F;
boolean G;
public MyNode(int A, String B, char C, int D, long E, short F, boolean G) {
this.A = A;
this.B = B;
this.C = C;
this.D = D;
this.E = E;
this.F = F;
this.G = G;
}
class MyComparator implememnts Comparator<MyNode> {
@Override
public int compare(MyNode node1, MyNode node2) {
if (node1.A < node2.A) {
return -1;
} else if (node1.A > node2.A) {
return 1;
} else { // node1.A == node2.A
if (node1.B.compareTo(node2.B) == -1) {
return 1;
}
else if (node1.B.compareTo(node2.B) == 1) {
return -1;
}else{ // node1.B.length() == node2.B.length()
if (node1.C - 'a' < node2.C - 'a') {
return -1;
} else if (node1.C - 'a' > node.C - 'a') {
return 1;
} else { // node1.C - 'a' == node2.C - 'a'
if ((long)node1.D + node1.E > (long)node2.D + node2.E) {
return -1;
} else if ((long)node1.D + node1.E < (long)node2.D + node2.E){
return 1
} else {// (long)node1.D + node1.E == (long)node2.D + node2.E
if (node1.F < node2.F) {
return -1;
} else if (node1.F > node2.F) {
return 1;
} else { // node1.F == node2.F
if (node1.G = node2.G) {
return 0;
} else if (node1.G){
return -1;
} else {
return 1;
}
}
}
}
}
}
}
}
}
public static void main(String[] args) {
List<MyNode> nodes = new ArrayList<>();
MyNode node1 = new MyNode(2, "Harryyyds", 'z', 100, 10000000000L, (short)90, true);
MyNode node2 = new MyNode(2, "Harry", 'a', 2, 10000000000L, (short)100, true);
MyNode node3 = new MyNode(1, "Harry", 'a', 2, 10000000000L, (short)100, true);
MyNode node4 = new MyNode(2, "Harryyyds", 'z', 2, 10000000000L, (short)100, true);
MyNode node5 = new MyNode(2, "Harryyyds", 'z', 100, 10000000000L, (short)90, false);
MyNode node6 = new MyNode(2, "Harryyyds", 'a', 2, 100000L, (short)100, true);
MyNode node7 = new MyNode(2, "Harryyyds", 'z', 100, 10000000000L, (short)90, true);
MyNode node8 = new MyNode(2, "Harryyyds", 'z', 100, 10000000000L, (short)100, true);
MyNode node9 = new MyNode(2, "Harryyyds", 'z', 100, 10000000000L, (short)80, false);
nodes.add(node1);
nodes.add(node2);
nodes.add(node3);
nodes.add(node4);
nodes.add(node5);
nodes.add(node6);
nodes.add(node7);
nodes.add(node8);
nodes.add(node9);
for (int i = 0 ; i < nodes.size(); i++) {
System.out.println("Before Sorting:" + nodes.get(i).A + " " + nodes.get(i).B + " "
+ nodes.get(i).C + " " + nodes.get(i).D + " " + nodes.get(i).E + " "
+ nodes.get(i).F + " " + nodes.get(i).G)
}
Collections.sort(nodes, new MyComparator());
for (int i = 0 ; i < nodes.size(); i++) {
System.out.println("After Sorting:" + nodes.get(i).A + " " + nodes.get(i).B + " "
+ nodes.get(i).C + " " + nodes.get(i).D + " " + nodes.get(i).E + " "
+ nodes.get(i).F + " " + nodes.get(i).G)
}
}
Last updated