𝗝𝗮𝘃𝗮 𝗖𝗼𝗹𝗹𝗲𝗰𝘁𝗶𝗼𝗻𝘀: 𝗧𝗵𝗲 𝗛𝗶𝗱𝗱𝗲𝗻 𝗧𝗼𝗼𝗹𝘀 𝗬𝗼𝘂 𝗠𝗶𝘀𝘀

Більшість розробників щодня використовують Java collections однаково. Вони використовують ArrayLists та HashSets. Але ви можете пропускати інструменти, які зроблять ваш код швидшим і безпечнішим.

Ось три конкретні інструменти для покращення вашого коду.

  1. Arrays.asList — це не справжній List

Коли ви використовуєте Arrays.asList(array), ви отримуєте список фіксованого розміру. Він пов'язаний безпосередньо з вашим початковим масивом.

  • Якщо ви зміните масив, список також зміниться.
  • Якщо ви спробуєте додати або видалити елементи, ваш код завершиться помилкою.

Щоб виправити це, обгорніть його в новий ArrayList: List<String> list = new ArrayList<>(Arrays.asList(array));

Це створює справжній, незалежний список, який ви можете змінювати.

  1. Використовуйте EnumSet для продуктивності

Ви зберігаєте enums у HashSet? Це створює зайві витрати ресурсів. HashSets використовують хеш-таблиці та заголовки об'єктів.

Замість цього використовуйте EnumSet. Він використовує бітовий вектор внутрішньо. Він надзвичайно швидкий і майже не споживає пам'яті. Він ідеально підходить для систем на основі прапорців (flags), таких як здібності гравця або налаштування.

  • Він забезпечує типізацію (type-safe).
  • Він набагато швидший за HashSet.
  • Він виконує побітові операції за вас.
  1. Використовуйте ConcurrentHashMap.computeIfAbsent для кешів

Якщо ви створюєте кеш, ви часто пишете складний код, щоб запобігти розрахунку одного й того самого значення кількома потоками. Це називається double-checked locking. Такий код важко читати, і в ньому легко припуститися помилки.

Замість цього використайте один рядок: cache.computeIfAbsent(key, this::expensiveCalculation);

Цей метод є атомарним. Він гарантує, що розрахунок виконається лише один раз, навіть якщо багато потоків запитують один і той самий ключ одночасно. Це зменшує кількість багів і робить ваші наміри зрозумілими.

Чому ці інструменти важливі:

  • Передбачувана продуктивність: ви уникаєте прихованих витрат пам'яті.
  • Менше багів: ви припиняєте боротися зі станами гонитви (race conditions) у багатопотоковому коді.
  • Чистіший код: інші розробники одразу розуміють вашу архітектуру.

Досить боротися з фреймворком. Почніть використовувати його, щоб писати лаконічніший і безпечніший код.

Джерело: https://dev.to/timevolt/java-collections-the-hidden-relics-most-developers-miss-and-why-theyre-game-changers-4ehd