来自 Java String Class 的 compareTo 方法如何比下面的代码有效?
How is compareTo method from Java String Class efficient than the below code?
private static int myCompare(String a, String b) {
/* my version of the compareTo method from the String Java class */
int len1 = a.length();
int len2 = b.length();
if (len1 == len2) {
for (int i = 0; i < a.length(); i++) {
int intValueOfStringA = (int) a.charAt(i);
int intValueOfStringB = (int) b.charAt(i);
if (intValueOfStringA != intValueOfStringB) {
return intValueOfStringA - intValueOfStringB;
}
}
}
return -1;
}
编辑:
对于第一次没有正确地提出我的问题,我深表歉意。展望未来,我会更加小心地准确地提出我的问题。对于我的项目,我需要一种方法来比较两个字符串以按字母顺序对它们进行排序,因此我没有使用谷歌搜索(像大多数理智的人一样),而是很快写了一个(也不是一个好的)。通过 String Class,特别是 compareTo
方法,我发现它使用了比我更多的变量。所以,我对这种方法比我的方法效率如何感到困惑。后来,我明白了它处理排序比我的效率高得多。详细来说,如果两个字符串的长度不同,那么我的代码会自动 return -1
,这不会给出关于第二个字符串是在第一个字符串之前还是之后的信息。
此外,感谢 DM 指出 String 对象显然可以直接访问其私有变量,并且在进行 toCharAt
调用时只提供一个副本,让 compareTo
方法确实有效,并且比我笨拙的 myCompare
方法提供更多实用性。
我真的很着急,但也很好奇为什么 compareTo
方法比 myCompare
方法更好,导致我在没有任何研究或思考的情况下不经意地匆忙提出我的问题。大声笑,创作者确实知道他们的方法。就像我说的,以后我会先研究 post 更好的问题。
嗯,看起来代码 2 确实使用了更多的内存。但那是因为它使用 toCharArray()
来复制字符串的内容。 String compareTo()
方法可以访问 String 的私有变量,而不必这样做。
除此之外,它们非常相似,尽管您的方法主要按字符串长度而不是字母顺序排序。我相信他们都是 O(n) - 他们必须检查两个字符串的每个字符。代码 2 也涉及复制两个字符串中的字符,但这些也是 O(n) 操作,并且 O(n) + O(n) = O(n).
private static int myCompare(String a, String b) {
/* my version of the compareTo method from the String Java class */
int len1 = a.length();
int len2 = b.length();
if (len1 == len2) {
for (int i = 0; i < a.length(); i++) {
int intValueOfStringA = (int) a.charAt(i);
int intValueOfStringB = (int) b.charAt(i);
if (intValueOfStringA != intValueOfStringB) {
return intValueOfStringA - intValueOfStringB;
}
}
}
return -1;
}
编辑:
对于第一次没有正确地提出我的问题,我深表歉意。展望未来,我会更加小心地准确地提出我的问题。对于我的项目,我需要一种方法来比较两个字符串以按字母顺序对它们进行排序,因此我没有使用谷歌搜索(像大多数理智的人一样),而是很快写了一个(也不是一个好的)。通过 String Class,特别是 compareTo
方法,我发现它使用了比我更多的变量。所以,我对这种方法比我的方法效率如何感到困惑。后来,我明白了它处理排序比我的效率高得多。详细来说,如果两个字符串的长度不同,那么我的代码会自动 return -1
,这不会给出关于第二个字符串是在第一个字符串之前还是之后的信息。
此外,感谢 DM 指出 String 对象显然可以直接访问其私有变量,并且在进行 toCharAt
调用时只提供一个副本,让 compareTo
方法确实有效,并且比我笨拙的 myCompare
方法提供更多实用性。
我真的很着急,但也很好奇为什么 compareTo
方法比 myCompare
方法更好,导致我在没有任何研究或思考的情况下不经意地匆忙提出我的问题。大声笑,创作者确实知道他们的方法。就像我说的,以后我会先研究 post 更好的问题。
嗯,看起来代码 2 确实使用了更多的内存。但那是因为它使用 toCharArray()
来复制字符串的内容。 String compareTo()
方法可以访问 String 的私有变量,而不必这样做。
除此之外,它们非常相似,尽管您的方法主要按字符串长度而不是字母顺序排序。我相信他们都是 O(n) - 他们必须检查两个字符串的每个字符。代码 2 也涉及复制两个字符串中的字符,但这些也是 O(n) 操作,并且 O(n) + O(n) = O(n).