嗯,在部分肯定。
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 + '}';
}
}