JVM saat ini memiliki dua jenis kode byte switch: LookupSwitch dan TableSwitch.
Setiap kasus dalam pernyataan switch memiliki offset integer, jika offset ini berdekatan (atau sebagian besar bersebelahan tanpa celah besar) (kasus 0: kasus 1: kasus 2, dll.), Maka TableSwitch digunakan.
Jika offset tersebar dengan celah yang besar (kasus 0: kasus 400: kasus 93748 :, dll.), Maka LookupSwitch digunakan.
Singkatnya, perbedaannya adalah bahwa TableSwitch dilakukan dalam waktu yang konstan karena setiap nilai dalam rentang nilai yang mungkin diberikan offset kode byte tertentu. Jadi, saat Anda memberikan pernyataan offset 3, ia tahu untuk melompat ke depan 3 untuk menemukan cabang yang benar.
Switch pencarian menggunakan pencarian biner untuk menemukan cabang kode yang benar. Ini berjalan dalam waktu O (log n), yang masih bagus, tapi bukan yang terbaik.
Untuk informasi lebih lanjut tentang ini, lihat di sini: Perbedaan antara JVM LookupSwitch dan TableSwitch?
Sejauh mana yang tercepat, gunakan pendekatan ini: Jika Anda memiliki 3 kasus atau lebih yang nilainya berurutan atau hampir berurutan, selalu gunakan sakelar.
Jika Anda memiliki 2 kasus, gunakan pernyataan if.
Untuk situasi lain, peralihan kemungkinan besar lebih cepat, tetapi itu tidak dijamin, karena pencarian biner di LookupSwitch dapat mencapai skenario yang buruk.
Juga, perlu diingat bahwa JVM akan menjalankan pengoptimalan JIT pada pernyataan if yang akan mencoba menempatkan cabang terpanas terlebih dahulu dalam kode. Ini disebut "Prediksi Cabang". Untuk informasi lebih lanjut tentang ini, lihat di sini: https://dzone.com/articles/branch-prediction-in-java
Pengalaman Anda mungkin berbeda. Saya tidak tahu bahwa JVM tidak menjalankan pengoptimalan serupa di LookupSwitch, tetapi saya telah belajar untuk mempercayai pengoptimalan JIT dan tidak mencoba mengakali kompiler.