我正在尝试使此代码运行得更快。使用大弦琴会花费太多时间。我对多线程了解不多,但我想尝试将其划分为多个线程以帮助获得更快的结果,但是我真的不知道该怎么做。
我从哪里开始,该怎么办?
下面的代码遍历字符串,试图找到手动放入的子字符串。
第一行要求输入字符串。 第二行要求您尝试找到许多字符串, 然后输入您要查找的字符串,该字符串不得超过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;
}
我想让这段代码运行得更快。
答案 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'
}
)
,最后合并结果并在返回时返回所有线程均已完成。