Nun, das könnte ein dummes Problem sein.Schnellere Implementierung von mehr als einer Eingabe in einer einzigen Zeile (Java)
Ich möchte nur eine schnellere Implementierung von Problem folgenden
ich drei Integer-Eingang in einer einzigen Zeile zB nehmen will:
10 34 54
Eine Möglichkeit ist es, eine BufferedReader zu machen und dann readline() verwenden, , die die ganze Zeile als eine Zeichenfolge lesen, dann können wir StringTokenizer verwenden, um drei ganze Zahlen zu trennen. (Langsame Implementation)
Eine andere Möglichkeit ist die Verwendung von 'Scanner' und die Eingabe der nextInt() Methode. (Langsamer als vorhergehende Methode)
Ich möchte eine schnelle Implementierung solche Art von Eingaben zu nehmen, da ich mehr als 2.000.000 Zeilen lesen muss und diese Implementierungen sind sehr langsam.
Meine Implementierung:
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
for(i=0;i<n;i++) {
str=br.readLine();
st = new StringTokenizer(str);
t1=Integer.parseInt(st.nextElement().toString());
t2=Integer.parseInt(st.nextElement().toString());
z=Long.parseLong(st.nextElement().toString());
}
Dieses wird durchgeschleift für n-mal. (N ist die Anzahl der Einträge) Da ich jede Zeile wissen, dass es nur drei ganze Zahl enthalten ist nicht nötig hasMoreElements()
Wie langsam? Können Sie einen von Ihnen verwendeten Beispielcode sowie Timings posten? –
Sie könnten BufferedReader verwenden und Ihr eigenes Parsing durchführen, das darauf spezialisiert ist, N Zeichen zu sammeln, bis Sie ein Leerzeichen oder das Ende der Zeichenfolge sehen. Dies könnte schneller sein. Beachten Sie, dass Sie in allen Fällen eine bessere Leistung erzielen, wenn Sie BufferedReader mit einem größeren Puffer verwenden (10kB werden schon viel helfen). – TheBlastOne
@SteveMcLeod Ich habe diese Methode auf einer Programmierwebseite verwendet und das Zeitlimit überschritten. Also dachte ich, dass es eine bessere Methode dafür geben würde. – dejavu