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

Większość programistów używa kolekcji w Javie w ten sam sposób każdego dnia. Korzystają z ArrayList i HashSet. Możesz jednak nie zauważać narzędzi, które sprawią, że Twój kod będzie szybszy i bezpieczniejszy.

Oto trzy konkretne narzędzia, które ulepszą Twój kod.

  1. Arrays.asList nie jest prawdziwą listą

Używając Arrays.asList(array), otrzymujesz listę o stałym rozmiarze. Jest ona bezpośrednio powiązana z Twoją oryginalną tablicą.

  • Jeśli zmienisz tablicę, lista również się zmieni.
  • Jeśli spróbujesz dodać lub usunąć elementy, Twój kod wyrzuci błąd.

Aby to naprawić, owiń ją w nową ArrayList: List<String> list = new ArrayList<>(Arrays.asList(array));

Tworzy to prawdziwą, niezależną listę, którą możesz modyfikować.

  1. Używaj EnumSet dla lepszej wydajności

Czy przechowujesz wyliczenia (enums) w HashSet? To generuje niepotrzebny narzut. HashSet wykorzystuje tablice mieszające i nagłówki obiektów.

Zamiast tego użyj EnumSet. Wewnętrznie wykorzystuje on wektor bitowy. Jest niezwykle szybki i niemal nie zużywa pamięci. Idealnie nadaje się do systemów opartych na flagach, takich jak moce graczy czy ustawienia.

  • Zapewnia bezpieczeństwo typów (type-safe).
  • Jest znacznie szybszy niż HashSet.
  • Obsługuje operacje bitowe za Ciebie.
  1. Używaj ConcurrentHashMap.computeIfAbsent do pamięci podręcznych

Budując cache, często piszesz skomplikowany kod, aby zapobiec sytuacji, w której wiele wątków oblicza tę samą wartość. Nazywa się to double-checked locking. Jest to trudne do odczytania i łatwo o błąd.

Zamiast tego użyj jednej linii: cache.computeIfAbsent(key, this::expensiveCalculation);

Ta metoda jest atomowa. Gwarantuje, że obliczenie zostanie wykonane tylko raz, nawet jeśli wiele wątków jednocześnie prosi o ten sam klucz. Zmniejsza to liczbę błędów i jasno wyraża Twoje intencje.

Dlaczego te narzędzia są ważne:

  • Przewidywalna wydajność: Unikasz ukrytych kosztów pamięciowych.
  • Mniej błędów: Przestajesz walczyć z wyścigami (race conditions) w kodzie wielowątkowym.
  • Czytelniejszy kod: Inni programiści natychmiast zrozumieją Twój projekt.

Przestań walczyć z frameworkiem. Zacznij go używać, aby pisać lżejszy i bezpieczniejszy kod.

Źródło: https://dev.to/timevolt/java-collections-the-hidden-relics-most-developers-miss-and-why-theyre-game-changers-4ehd