我正在尝试寻找使用不同 block 使用来提高性能的最佳方式/方法。我正在运行下面的回文程序,用 3 种不同的方式测量每种方式的执行时间。但我总是得到“0”作为输出。我的代码有什么问题。请帮助我。
主要内容
long startTime, endTime, duration;
startTime = Instant.now().toEpochMilli();
System.out.println(palindromeUsingStringBuilderReverse(str));
endTime = Instant.now().toEpochMilli();
duration = (endTime - startTime);
System.out.println("Duration for using string builder : " + duration);
startTime = Instant.now().toEpochMilli();
System.out.println(palindromeUsingForLoop(str));
endTime = Instant.now().toEpochMilli();
duration = (endTime - startTime);
System.out.println("Duration for using for loop : " + duration);
startTime = Instant.now().toEpochMilli();
System.out.println(palindromeUsingWhile(str));
endTime = Instant.now().toEpochMilli();
duration = (endTime - startTime);
System.out.println("Duration for using while loop : " + duration);
回文使用StringBuilderReverse
StringBuilder bdr = new StringBuilder(str);
if (str.equalsIgnoreCase(bdr.reverse().toString())) {
return "The given string is a Palindrome.";
} else {
return "This is not a Palindrome string.";
}
回文使用ForLoop
String revStr = "";
for (int i=str.length()-1; i>=0; i--) {
revStr = revStr + str.charAt(i);
}
if (str.equalsIgnoreCase(revStr)) {
return "The given string is a Palindrome.";
} else {
return "This is not a Palindrome string.";
}
回文UsingWhile
int i = 0, j = str.length() - 1;
while (i < str.length()) {
if (str.charAt(i) != str.charAt(j)) {
return "This is not a Palindrome string.";
} else {
i++;
j--;
}
}
return "The given string is a Palindrome.";
执行时的输出
Enter a word to check its a palindrome or not : madammadammadammadammadammadammadammadammadammadam
The given string is a Palindrome.
Duration for using string builder : 0
The given string is a Palindrome.
Duration for using for loop : 0
The given string is a Palindrome.
Duration for using while loop : 0
Process finished with exit code 0
最佳答案
您的时间单位太大,无法捕获所用的时间。您应该采用较小的时间单位(例如纳秒)并尝试多次运行相同的检查,例如 10000 次。
纳秒级示例代码。
long startTime, endTime, duration;
startTime = System.nanoTime();
System.out.println(palindromeUsingStringBuilderReverse(str));
endTime = System.nanoTime();
duration = endTime - startTime;
System.out.println("Duration for using string builder : " + duration);
startTime = System.nanoTime();
System.out.println(palindromeUsingForLoop(str));
endTime = System.nanoTime();
duration = endTime - startTime;
System.out.println("Duration for using for loop : " + duration);
startTime = System.nanoTime();
System.out.println(palindromeUsingWhile(str));
endTime = System.nanoTime();
duration = endTime - startTime;
System.out.println("Duration for using while loop : " + duration);
关于java - 验证处理时间的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57228175/