嗯,在部分肯定。
compareTo通常用於按順序放置東西,因此您不想只返回0或1.如果您有myObject.compareTo(anotherObject),那麼約定將返回0,如果它們匹配,則a如果myObject出現在anotherObject之前,則爲負數,如果myObject出現在anotherObject之後,則爲正數。
所以,如果我們的對象是字符串,然後:
"A".compareTo("A") = 0,
"A".compareTo("B") = -1,
"B".compareTo("A") = 1.
他們可能不會在-1和+1,它們可以是任何消極或積極的。這僅僅是例子!
您對「標記」的想法是正確的。標記只是說出你感興趣的部分的一種奇特的方式。所以在一個句子中,「標記」可能是一個詞。在一個等式中,它可能是一個術語。
最後,如果你正在使用字符串,這應該很容易實現 - 它們有一個已經實現的compareTo!你可以打電話給現成的。
這裏是一堆代碼來演示。在這種情況下,類BSTNode並沒有真正添加任何東西到原始字符串,但它有助於提供這個想法。注意大寫位於小寫字母之前,因爲這是字符串的默認排序。另請參閱第二個compareTo方法。儘管返回的數字不同,但它的工作方式與第一種方法一樣。最後,請注意我實現了Comparable接口。這樣可以輕鬆地進行分類。
public class BSTNode implements Comparable<BSTNode> {
public String node;
public BSTNode(String node) {
this.node = node;
}
public static void main(String[] args) {
String string = "This is the original string is it not?";
// Tokenize and make nodes
String[] tokens = string.split(" ");
BSTNode[] nodes = new BSTNode[tokens.length];
for (int i = 0; i < nodes.length; i++) {
nodes[i] = new BSTNode(tokens[i]);
}
// Original
for (int i = 0; i < nodes.length; i++) {
System.out.println("Unsorted " + i + ": " + nodes[i]);
}
System.out.println();
// Compare two nodes
System.out.println("Node[0] compared to Node[1] = "
+ nodes[0].compareTo(nodes[1]));
System.out.println("Node[1] compared to Node[0] = "
+ nodes[1].compareTo(nodes[0]));
System.out.println("Node[1] compared to Node[5] = "
+ nodes[1].compareTo(nodes[5]));
System.out.println();
// Sort (only possible thanks to compareTo)
Arrays.sort(nodes);
for (int i = 0; i < nodes.length; i++) {
System.out.println("Sorted " + i + ": " + nodes[i]);
}
}
@Override
public int compareTo(BSTNode t) {
return this.node.compareTo(t.node);
}
public int compareTo2(BSTNode t) {
String a = node;
String b = t.node;
if (a.compareTo(b) < 0) {
return -1;
} else if (a.compareTo(b) == 0) {
return 0;
} else {
return 1;
}
}
@Override
public String toString() {
return "BSTNode{" + "node=" + node + '}';
}
}