如何通过以下代码获得更好的性能

时间:2019-03-26 23:09:01

标签: java string multithreading performance

我正在尝试使此代码运行得更快。使用大弦琴会花费太多时间。我对多线程了解不多,但我想尝试将其划分为多个线程以帮助获得更快的结果,但是我真的不知道该怎么做。

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

下面的代码遍历字符串,试图找到手动放入的子字符串。

第一行要求输入字符串。 第二行要求您尝试找到许多字符串, 然后输入您要查找的字符串,该字符串不得超过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;
}

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

1 个答案:

答案 0 :(得分:0)

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

 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();分解为分区@results = HTTParty.post(' https://www.pingme.com/wp-json/wplms/v1/user/register', :body => { :name => "#{@book.name}", :author => "#{@book.author}", :description => "#{@book.description}", :category_id => "#{@book.category_id}", :sub_category_id => "#{@book.sub_category_id}"}.to_json, :headers => { 'Content-Type' => 'application/json', 'Authorization' => '77d22458349303990334xxxxxxxxxx' } ) ,最后合并结果并在返回时返回所有线程均已完成。