繁体   English   中英

如何使用以下代码获得更好的性能

[英]How to get better performance with the following code

我试图让这段代码运行得更快。 使用大字符串需要花费太多时间。 我不太了解多线程,但我想尝试将其划分为线程,以帮助获得更快的结果,但我真的不知道如何做到这一点。

我从哪里开始,我该怎么办?

以下代码查看字符串,尝试查找手动放入的子字符串。

第一行要求输入字符串。 第二行要求您尝试查找许多字符串,然后输入您要查找的不超过4且不短于1的字符串。

在输出中,您将获得字符串中子字符串的次数。

    BufferedReader br;
    br = new BufferedReader(new InputStreamReader(System.in));
    String getLine = br.readLine();

    if (getLine.length() < 1 || getLine.length() > 1000000) {
        getLine = br.readLine();
    }

    getLine = getLine.toUpperCase();

    String helpNumber = br.readLine();
    int number = Integer.parseInt(helpNumber);

    if(number < 1 || number > 100000){
        helpNumber = br.readLine();
        number = Integer.parseInt(helpNumber);
    }

    String[] shortCuts = new String[number];

    for (int i = 0; i < number; i++) {
        shortCuts[i] = br.readLine();
        if(shortCuts[i].length()>=1 && shortCuts[i].length()<=4) {
            shortCuts[i] = shortCuts[i];
            shortCuts[i] = shortCuts[i].toUpperCase();
        }else i--;
    }

    for (int i = 0; i < number; i++) {
        System.out.println(count(getLine, shortCuts[i]));
    }

}

private static int count(final String string, final String substring) {
    int count = 0;
    int index = 0;

    while ((index = string.indexOf(substring, index)) != -1) {
        index++;
        count++;
    }

    return count;
}

我想让这段代码运行得更快。

假设代码的“慢”部分是对此处调用的字符串中的子字符串的计数

 for (int i = 0; i < number; i++) {
        System.out.println(count(getLine, shortCuts[i]));
    }

一想到加快以下操作

private static int count(final String string, final String substring)

是将它调用到系统中的多个逻辑处理器。 您需要了解并阅读CompletableFuture

因此,您将能够将数组shortcuts n分解为分区,具体取决于计算机Runtime.getRuntime().availableProcessors();的逻辑处理器Runtime.getRuntime().availableProcessors(); 将结果组合在一起并在所有线程完成时返回。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM