Die erweiterte for-Anweisung ist schneller als die normale for-Anweisung, da sie Iterator verwendet! Jemand sagte mir, dass ich es so belassen habe, wie es war, ohne es zu überprüfen. Zu diesem Zeitpunkt habe ich beschlossen, es richtig zu untersuchen. Was ist, wenn es um die Geschichte geht, dass ein normaler Satz besser ist ... Ich denke, die Ära ist Stream, aber da meine Site Java 6 ist, muss ich meinen Junioren beibringen, wie man in Java 6 schreibt. ~~ Es liegt nicht daran, dass ich keinen Stream schreiben kann. ~~
Als ich es bei ungefähr 100.000 gemacht habe, war der Wert zu klein, um ihn zu vergleichen, also habe ich ihn 10 Millionen Mal wiederholt.
Main.java
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 10000000; i++) {
list.add(i);
}
//Start
long start = System.currentTimeMillis();
//10 Millionen Schleifen
for (int i = 0; i < list.size(); i++) {
int tmp = list.get(i);
}
//Ende
long end = System.currentTimeMillis();
System.out.println("zur Aussage: " + (end - start) + " ms");
//Start
start = System.currentTimeMillis();
//10 Millionen Schleifen
for (Integer i : list) {
int tmp = i;
}
//Ende
end = System.currentTimeMillis();
System.out.println("Für Aussage erweitert: " + (end - start) + " ms");
}
}
Was ein Idiot ... Ich habe es mehrmals versucht, aber die erweiterte for-Anweisung wurde nicht schneller.
zur Aussage: 24 ms
Für Aussage erweitert: 29 ms
Als ich untersuchte, dass es nicht so enden würde, wie es ist, gab es eine Site wie diese.
Grund für die Verwendung von erweitert für Aussage- [Seasar] Tagebuch von soichirooooo5
Wenn Sie sich den Link ansehen, lautet die Antwort, die Sie in diesem Artikel schreiben wollten: Es ist eine große Sache, also mache ich es bis zum Ende. Da die Überprüfung nur mit ArrayList erfolgt, werde ich auch mit Array und LinkedList überprüfen.
Main.java
public class Main {
public static void main(String[] args) {
int[] array = new int[10000000];
for (int i = 0; i < 10000000; i++) {
array[i] = i;
}
//Start
long start = System.currentTimeMillis();
//10 Millionen Schleifen
for (int i = 0; i < array.length; i++) {
int tmp = array[i];
}
//Ende
long end = System.currentTimeMillis();
System.out.println("zur Aussage: " + (end - start) + " ms");
//Start
start = System.currentTimeMillis();
//10 Millionen Schleifen
for (int i : array) {
int tmp = i;
}
//Ende
end = System.currentTimeMillis();
System.out.println("Für Aussage erweitert: " + (end - start) + " ms");
}
}
~~ für Satz zu schnell www ~~ Weil Autoboxing in der erweiterten for-Anweisung durchgeführt wurde Ich konnte es nicht genau messen. Das Ergebnis bleibt gleich.
zur Aussage: 3 ms
Für Aussage erweitert: 3 ms
Main.java
package qiita;
import java.util.LinkedList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new LinkedList<>();
for (int i = 0; i < 10000000; i++) {
list.add(i);
}
//Start
long start = System.currentTimeMillis();
//10 Millionen Schleifen
for (int i = 0; i < list.size(); i++) {
int tmp = list.get(i);
}
//Ende
long end = System.currentTimeMillis();
System.out.println("zur Aussage: " + (end - start) + " ms");
//Start
start = System.currentTimeMillis();
//10 Millionen Schleifen
for (Integer i : list) {
int tmp = i;
}
//Ende
end = System.currentTimeMillis();
System.out.println("Für Aussage erweitert: " + (end - start) + " ms");
}
}
Ich habe seit ungefähr 5 Minuten keine Antwort mehr erhalten.
Da dies nicht endet, überprüfen Sie es erneut mit 100.000 Schleifen
Main.java
import java.util.LinkedList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new LinkedList<>();
for (int i = 0; i < 100000; i++) {
list.add(i);
}
//Start
long start = System.currentTimeMillis();
//10 Millionen Schleifen
for (int i = 0; i < list.size(); i++) {
int tmp = list.get(i);
}
//Ende
long end = System.currentTimeMillis();
System.out.println("zur Aussage: " + (end - start) + " ms");
//Start
start = System.currentTimeMillis();
//10 Millionen Schleifen
for (Integer i : list) {
int tmp = i;
}
//Ende
end = System.currentTimeMillis();
System.out.println("Für Aussage erweitert: " + (end - start) + " ms");
}
}
es ist wunderbar! !!
zur Aussage: 5695 ms
Für Aussage erweitert: 36 ms
Es stellte sich heraus, dass die normale for-Anweisung für Dinge, die von vorne in der richtigen Reihenfolge ausgeführt werden, wie ArrayList und Arrays, schneller ist. Die verknüpfte Liste machte jedoch einen überwältigenden Unterschied. Es ist seltsam, sich beim Schleifen der List-Oberfläche um die Substanz zu kümmern, daher konnte ich zu dem Schluss kommen, dass die erweiterte for-Anweisung in Ordnung ist.
Das Folgende ist ein Zitat von der Referenzseite.
Wenn Sie die erweiterte for-Anweisung verwenden, müssen Sie sich keine Gedanken über "99% oder mehr Leistungseinbußen" machen, auch wenn Sie nicht wissen, ob das an die for-Anweisung übergebene Objekt ArrayList oder LinkedList ist.
Außerdem erweitert die erweiterte for-Anweisung den Implementierungstyp der List-Schnittstelle in Code, der einen Iterator verwendet, und konvertiert ihn im Fall eines Arrays in Code, der auf den Index zugreift.
Sie können sehen, dass diese Compilerübersetzung den entsprechenden Code für die Liste oder das Array generiert, die Sie an die for-Anweisung übergeben. Mit anderen Worten, wenn Sie Extended für verwenden, müssen Sie an nichts denken und sich um nichts kümmern. Wenn etwas schief geht, wird es etwas hinter der API tun.
Mit anderen Worten, Sie können die erweiterte for-Anweisung verwenden, ohne an irgendetwas zu denken. stream Lass uns studieren.
Recommended Posts