Я пишу программу в java, чтобы получить статистику по словам в очень большой строке (строка s < = 100000). Это займет менее 1 секунды и использует менее 16 МБ памяти.Java статистика по словам в длинной строке
import java.util.Scanner;
class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String t = sc.nextLine();
int i=0;
while(t.charAt(i)==' ') i++;
t = t.substring(i);
String[] s = t.split(" +");
RecString[] stat = new RecString[s.length];
for(i=0; i<s.length;i++){
stat[i] = new RecString("");
}
int j=0;
for(i=0; i<s.length;i++){
int f=0;
for(int h =0; h<stat.length; h++){
if(stat[h].word.equals(s[i])){
f = 1;
stat[h].count++;
break;
}
}
if(f==0){
stat[j] = new RecString(s[i]);
j++;
}
}
for(i=0;i<=j;i++){
if(stat[i].word != ""){
System.out.println(stat[i].word+" "+(stat[i].count));
}
}
}
}
class RecString{
public String word;
public int count;
public RecString(String s){
word = s;
count = 1;
}
}
Этот код работает на нитях длиной < = 255 Но для больших строк у меня есть время или/и ограничение памяти.
Помоги мне, пожалуйста, чтобы оптимизировать свою программу
Вы считаете количество вхождений каждого слова ?! Или...? –
Объем памяти, используемой для такого тривиального приложения, вероятно, будет в основном основан на том, на что настроен размер вашей кучи и JVM. Также чтение новой строки всегда требует потенциальной проблемы с памятью. –
@DaveNewton, да, я подсчитываю количество вхождений каждого слова. – user2279756