𝗝𝗮𝘃𝗮 𝗖𝗼𝗹𝗹𝗲𝗰𝘁𝗶𝗼𝗻𝘀: 𝗔𝗹𝗮𝘁𝗮𝗻 𝗧𝗲𝗿𝘀𝗲𝗿𝘆𝗮𝗻𝗴 𝗬𝗮𝗻𝗴 𝗔𝗻𝗱𝗮 𝗧𝗲𝗿𝗹𝗲𝗽𝗮𝘀𝗸𝗮𝗻

Kebanyakan pembangun menggunakan Java collections dengan cara yang sama setiap hari. Mereka menggunakan ArrayList dan HashSet. Namun, anda mungkin terlepas alatan yang boleh menjadikan kod anda lebih pantas dan lebih selamat.

Berikut adalah tiga alatan khusus untuk menambah baik kod anda.

  1. Arrays.asList bukan List yang sebenar

Apabila anda menggunakan Arrays.asList(array), anda akan mendapat senarai bersaiz tetap. Ia dipautkan secara langsung kepada array asal anda.

  • Jika anda mengubah array, senarai tersebut turut berubah.
  • Jika anda cuba menambah atau membuang item, kod anda akan terhenti (crash) dengan ralat.

Untuk memperbaikinya, bungkus ia dalam ArrayList baharu: List<String> list = new ArrayList<>(Arrays.asList(array));

Ini menghasilkan senarai sebenar yang bebas dan boleh diubah suai.

  1. Gunakan EnumSet untuk prestasi

Adakah anda menyimpan enum dalam HashSet? Itu mewujudkan overhead yang tidak perlu. HashSet menggunakan jadual hash dan pengepala objek (object headers).

Gunakan EnumSet sebagai ganti. Ia menggunakan vektor bit secara dalaman. Ia sangat pantas dan menggunakan hampir tiada memori. Ia sangat sesuai untuk sistem berasaskan bendera (flag-based) seperti kuasa pemain atau tetapan.

  • Ia adalah type-safe.
  • Ia jauh lebih pantas daripada HashSet.
  • Ia mengendalikan operasi bitwise untuk anda.
  1. Gunakan ConcurrentHashMap.computeIfAbsent untuk cache

Jika anda membina cache, anda sering menulis kod yang kompleks untuk menghalang pelbagai thread daripada mengira nilai yang sama. Ini dipanggil double-checked locking. Ia sukar dibaca dan mudah rosak.

Sebaliknya, gunakan satu baris sahaja: cache.computeIfAbsent(key, this::expensiveCalculation);

Kaedah ini adalah atomik. Ia memastikan pengiraan hanya berjalan sekali, walaupun banyak thread meminta kunci (key) yang sama pada masa yang sama. Ia mengurangkan pepijat (bugs) dan menjadikan tujuan kod anda lebih jelas.

Mengapa alatan ini penting:

  • Prestasi yang boleh diramal: Anda mengelakkan kos memori tersembunyi.
  • Kurang pepijat: Anda berhenti bergelut dengan race conditions dalam kod berbilang thread (multi-threaded).
  • Kod yang lebih jelas: Pembangun lain dapat memahami reka bentuk anda dengan serta-merta.

Berhenti melawan kerangka kerja (framework). Mula menggunakannya untuk menulis kod yang lebih ramping dan lebih selamat.

Sumber: https://dev.to/timevolt/java-collections-the-hidden-relics-most-developers-miss-and-why-theyre-game-changers-4ehd