[英]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.