𝗝𝗮𝘃𝗮 𝗖𝗼𝗹𝗹𝗲𝗰𝘁𝗶𝗼𝗻𝘀: 𝗧𝗵𝗲 𝗛𝗶𝗱𝗱𝗲𝗻 𝗧𝗼𝗼𝗹𝘀 𝗬𝗼𝘂 𝗠𝗶𝘀𝘀
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.
Arrays.asListnie 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ć.
- Używaj
EnumSetdla 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.
- Używaj
ConcurrentHashMap.computeIfAbsentdo 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.