𝗝𝗮𝘃𝗮 𝗖𝗼𝗹𝗹𝗲𝗰𝘁𝗶𝗼𝗻𝘀: 𝗞𝗮𝗰̧ı𝗿𝗱ı𝗴̆ı𝗻ı𝘇 𝗚𝗶𝘇𝗹𝗶 𝗔𝗿𝗮𝗰̧𝗹𝗮𝗿

Çoğu geliştirici Java koleksiyonlarını her gün aynı şekilde kullanır. ArrayList ve HashSet kullanırlar. Ancak kodunuzu daha hızlı ve daha güvenli hale getirecek araçları kaçırıyor olabilirsiniz.

İşte kodunuzu iyileştirmek için üç özel araç.

  1. Arrays.asList gerçek bir List değildir

Arrays.asList(array) kullandığınızda, sabit boyutlu bir liste elde edersiniz. Bu liste doğrudan orijinal dizinize bağlanır.

  • Diziyi değiştirirseniz, liste de değişir.
  • Öğe eklemeye veya çıkarmaya çalışırsanız, kodunuz bir hata ile çöker.

Bunu düzeltmek için onu yeni bir ArrayList içine alın: List list = new ArrayList<>(Arrays.asList(array));

Bu, üzerinde değişiklik yapabileceğiniz gerçek ve bağımsız bir liste oluşturur.

  1. Performans için EnumSet kullanın

Enum'ları bir HashSet içinde mi saklıyorsunuz? Bu, gereksiz bir ek yük (overhead) oluşturur. HashSet'ler karma tablolar (hash tables) ve nesne başlıkları (object headers) kullanır.

Bunun yerine EnumSet kullanın. Dahili olarak bir bit vektörü kullanır. Son derece hızlıdır ve neredeyse hiç bellek kullanmaz. Oyuncu güçleri veya ayarlar gibi bayrak tabanlı (flag-based) sistemler için mükemmeldir.

  • Tip güvenlidir (type-safe).
  • Bir HashSet'ten çok daha hızlıdır.
  • Bit düzeyindeki işlemleri sizin yerinize halleder.
  1. Önbellekler için ConcurrentHashMap.computeIfAbsent kullanın

Bir önbellek (cache) oluşturuyorsanız, birden fazla iş parçacığının (thread) aynı değeri hesaplamasını önlemek için genellikle karmaşık kodlar yazarsınız. Buna "double-checked locking" denir. Okunması zordur ve bozulmaya müsaittir.

Bunun yerine tek bir satır kullanın: cache.computeIfAbsent(key, this::expensiveCalculation);

Bu yöntem atomiktir. Birçok iş parçacığı aynı anda aynı anahtarı istese bile, hesaplamanın yalnızca bir kez çalışmasını sağlar. Hataları azaltır ve niyetinizi netleştirir.

Bu araçlar neden önemlidir:

  • Öngörülebilir performans: Gizli bellek maliyetlerinden kaçınırsınız.
  • Daha az hata: Çok iş parçacıklı (multi-threaded) kodlardaki yarış durumlarıyla (race conditions) savaşmayı bırakırsınız.
  • Daha net kod: Diğer geliştiriciler tasarımınızı anında anlar.

Framework ile savaşmayı bırakın. Daha yalın ve daha güvenli kod yazmak için onu kullanmaya başlayın.

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