Natürlich ist das eine unmögliche Aussage in Java (bis heute), aber idealerweise würde ich es gerne implementieren, da es im Mittelpunkt vieler Iterationen steht. Zum Beispiel das erste Mal, dass es aufgerufen wird Ich mache es 650.000+ Mal, wenn es die ArrayList
erstellt.
Leider ist mein Code tatsächlich nicht set
innerhalb der else
Schleife; also wird es sowohl die add
als auch die set
Befehle und Zeitverschwendung überschreiten.
Danach habe ich es auch in einer anderen Schleife, wo es nur das Set ausführt, da die Daten bereits erstellt wurden und das ist in vielen anderen multi-geschachtelt, so dass es ein langwieriger Prozess ist.
%Vor% Irgendwelche Ideen oder Theorien?
Ich bin unsicher über Geschwindigkeiten in Java, wenn es um if
-Anweisungen und ArrayList
-Befehle usw. geht
Vermisse ich etwas?
Ist dieser hypothetische Code nicht
? %Vor%dasselbe bedeuten?
%Vor%oder das?
%Vor%(Letzteres macht mehr Sinn ... denke ich). Wie auch immer, es ist offensichtlich, dass Sie die Schleife neu schreiben können, so dass der "else test" nicht innerhalb der Schleife wiederholt wird ... wie ich gerade getan habe.
FWIW, dies ist höchstwahrscheinlich ein Fall einer vorzeitigen Optimierung. Das heißt, Sie verschwenden wahrscheinlich Ihre Zeit damit, Code zu optimieren, der nicht optimiert werden muss:
Nach allem, was Sie wissen, hat der Optimierer des JIT-Compilers den Code bereits verschoben, so dass der "else" -Teil nicht mehr in der Schleife ist.
Auch wenn dies nicht der Fall ist, besteht die Möglichkeit, dass die bestimmte Sache, die Sie zu optimieren versuchen, kein bedeutender Engpass ist ... selbst wenn sie 600.000 Mal ausgeführt werden könnte.
Mein Rat ist, dieses Problem für jetzt zu vergessen. Bring das Programm zum Laufen. Wenn es funktioniert, entscheiden Sie, ob es schnell genug läuft. Wenn dies nicht der Fall ist, profilieren Sie es und verwenden Sie die Profiler-Ausgabe, um zu entscheiden, wo es sich lohnt, Ihre Zeit zu optimieren.
Umbrechen Sie die Anweisung "set" auf "set if not set" und legen Sie sie oberhalb der while-Schleife ab.
Sie haben Recht, die Sprache bietet nicht, was Sie suchen, in genau dieser Syntax, aber das liegt daran, dass es Programmierparadigmen gibt, wie das, das ich gerade vorgeschlagen habe, damit Sie die von Ihnen vorgeschlagene Syntax nicht brauchen.
Java hat diese Kontrollstruktur nicht.
Es sollte jedoch beachtet werden, dass andere Sprachen dies tun.
Python zum Beispiel hat die while-sonst -Konstruktion.
In Java können Sie dieses Verhalten nachahmen, wie Sie bereits gezeigt haben:
%Vor%Diese else-Anweisung sollte nur den else-Code ausführen, wenn die Bedingung false ist, das bedeutet, dass sie immer ausgeführt wird. Aber es gibt einen Haken, wenn Sie das Break-Schlüsselwort in der while-Schleife verwenden, sollte die else-Anweisung nicht ausgeführt werden.
Der erfüllende Code ist nur:
%Vor%Angenommen, Sie kommen von Python und akzeptieren dies als dasselbe:
%Vor%Das ähnlichste, was ich mir vorstellen konnte, war:
%Vor% Beachten Sie die Notwendigkeit für die Logik und die umgekehrte Logik. Ich bin mir nicht sicher, ob dies eine großartige Lösung ist (Duplizierung der Logik), aber das spaltenlose else
ist die engste Syntax, die ich mir vorstellen kann, während ich gleichzeitig die Logik nicht mehr ausführen muss.
Tags und Links java performance theory arraylist while-loop