[Werbung für Blog:] Einzelheiten von switch in Java
-
Einzelheiten von switch in Java
Ja, dieser Artikel ist dem einfachen JDK 7 switch gewidmet. Es kommt manchmal vor, dass das gesammelte Material interessant und wenig bekannt zu sein scheint, und dann stellt es sich heraus, dass die Besonderheiten der Realisierung von switch jeder Großmutter schon 50 Jahre lang bekannt sind. Aber ich werde es versuchen. Zuerst stelle ich drei Fragen:
- (simpel) Was ist das Ergebnis der Arbeit eines solchen Codes?
switch(5){ default: System.out.print(0); case 1: System.out.print(1); break; case 4: System.out.print(4); case 2: System.out.print(2); }
- Die nächsten 2 Varianten sind fast gleich. Nur die Literale sind ein bisschen verschieden.
//Variante 1 switch("BBBBBB"){ case "AaAaAa": break; case "AaAaBB": break; case "AaBBAa": break; case "AaBBBB": break; case "BBAaAa": break; case "BBAaBB": break; case "BBBBAa": break; case "BBBBBB": break; }
//Variante 2 switch("BBBBBB_8"){ case "AaAaAa_1": break; case "AaAaBB_2": break; case "AaBBAa_3": break; case "AaBBBB_4": break; case "BBAaAa_5": break; case "BBAaBB_6": break; case "BBBBAa_7": break; case "BBBBBB_8": break; }
Warum wird der erste Switch wesentlich langsamer ausgeführt, zumindest bei dem abgeschalteten JIT(-Djava.compiler=NONE)? Prüfen Sie selbst in dem Zyklus! Mit einem solchen Code kann man JIT nicht hereinlegen, aber wenn wir uns ein wenig Mühe geben, wird der Unterschied nicht bemerkbar sein.
- Wie ist die rechnerische Komplexität des Algorithmus zur Bestimmung des kongruenten Wertes zwischen n-cases (mindestens in JDK 7)?
Antworten:
- 01
- Die Methode hashCode() gibt den gleichen Wert für alle Zeilen des ersten Switch zurück. Detaillierte Informationen werden unten dargestellt.
- In Abhängigkeit von dem Fall kann O(1), O(log n) vorhanden sein und sogar O(n) erreichen.
Versuchen wir nun schlau daraus zu werden. Die Werte von „case“ werde ich kurz als „Schlüssel“ bezeichnen.
Weiterlesen: http://gumzo.de/post/105/
EDIT von Gregor: Ich habe im Threadtitel kenntlich gemacht, dass es sich bei diesem Thread um Werbung für den Blog des Threaderstellers dreht. Die Alternative wäre eine Löschung des Threads, aber ich denke, da es sich hier durchaus um Java dreht, reicht eine explizite Kennzeichnung.