while-else-Schleife

8

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

    
xchiltonx 28.05.2012, 22:26
quelle

7 Antworten

17

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.

    
Stephen C 28.05.2012, 22:34
quelle
3

Ich sehe nicht, warum es eine Verkapselung von einer Weile gibt ...

Verwenden Sie

%Vor%     
Jay 28.05.2012 22:32
quelle
1

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.

    
djechlin 28.05.2012 22:30
quelle
0

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%     
Trevor Hickey 27.06.2016 02:35
quelle
0
%Vor%

Sie sind willkommen.

Beispiel:

%Vor%     
momomo 10.06.2017 15:41
quelle
0

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%     
Kamil B 09.08.2017 22:41
quelle
0

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.

    
Jefferey Cave 20.10.2017 21:07
quelle