我在java中有两个大约15个字符的字符串,我想知道比较这两个字符串需要多少个字符串或周期。我怎样才能获得这些信息。
示例:
"Hello World".compareTo("Another Hello World")
答案 0 :(得分:2)
我不知道如何在触发器或周期中回答这个问题,但就调用compareTo
时实际执行的操作而言,实际处理取决于两个字符串共享的相同字符的数量在他们的开头,因为compareTo
只会测试找到第一个不相等字符所需的字符数。
在您的示例中,只会检查两个字符串中的第一个字符(因为'H'!='A')。在最坏的情况下,如果两个字符串相等,则将比较两个字符串的所有字符。
答案 1 :(得分:2)
我想知道它需要多少个触发器或周期
我假设你对CPU周期/时间感兴趣。
要测量Windows下每个线程的CPU时间,可以使用GetThreadTimes WinAPI函数,可以使用JNI包装其调用。
要获得周期,您需要使用QueryThreadCycleTime功能。
两者都会返回每个线程的时间/周期,所以即使其他一些JVM线程在测量过程中占用CPU,它也不会包含在结果中。
修改强>
看起来每个线程的时间从1.5开始可用:
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/management/ThreadMXBean.html
答案 2 :(得分:0)
java.lang.String
类源可用。
例如,在JRE 1.6.0_38中,它以下列方式实现:
public int compareTo(String anotherString) {
int len1 = count;
int len2 = anotherString.count;
int n = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
if (i == j) {
int k = i;
int lim = n + i;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
} else {
while (n-- != 0) {
char c1 = v1[i++];
char c2 = v2[j++];
if (c1 != c2) {
return c1 - c2;
}
}
}
return len1 - len2;
}
答案 3 :(得分:0)
它是O(n),其中n
是两个字符串中匹配字符的数量。
在最坏的情况下,一个字符串是另一个字符串的前缀n
将是较短字符串的长度。
例如&#34; test&#34; .compareTo(&#34; testa&#34;)。