java - 验证处理时间的有效方法

标签 java oop

我正在尝试寻找使用不同 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/

相关文章:

c++ - 在运行时从没有虚函数的基类方法访问派生类方法

php - 你如何超越 self ?

c++ - 跨平台代码组织

java - 读写锁。了解从 readLock 升级到 writeLock

java - 从多个文件中获取数据并移动到一个文件

java - 界面不在列中

php - MVC + Service Layer 在 zend 或 PHP 中常见吗?

java - 在 Java 中将多个列表中的数据提取到新列表中的最优雅的方法是什么?

java - CountDownLatch 不释放线程

oop - 如何以面向对象的方式对商店的营业时间进行建模?