Kolejny raz Java pojawia się w nowej odsłonie we wrześniu. Tym razem premiera Javy 19 GA nastąpiła 20 września.
Zobaczmy, co ciekawego znalazło się w ostatniej wersji naszego ulubionego języka.
Java 19 - 20 września 2022
-
W Javie 19 pojawiła się jedna z ciekawszych zmian istotnych w kontekście pracy dewelopera,
co nie zostało specjalnie zaanonsowane w liście zmian wprowadzonych w tej wersji Javy.
Zmiana dotyczy inicjalizacji haszmapy.
O co chodzi? Otóż zawsze byliśmy w stanie wygenerować HashMap
w następujący sposób:
Intuicyjnie można pomyśleć, że taka inicjalizacja pozwoli stworzyć 120 mapowań, co jednak...nie jest prawdą!
Dzieje się tak, ponieważ haszmapa jest inicjowana z domyślnym współczynnikiem obciążenia 0,75.
Oznacza to, że jak tylko haszmapa jest zapełniona w 75%,
jest ona przebudowywana ("odświeżana") z dwukrotnie większym rozmiarem.
Gwarantuje to, że elementy są rozmieszczone tak równomiernie,
jak to możliwe, oraz że jak najmniej wiader (popularne buckets) haszmapy zawiera więcej niż jeden element.
W ten sposób haszmapa o pojemności 120 może pomieścić tylko 120 x 0,75 = 90 mapowań.
I teraz, aby utworzyć haszmapę dla realnych 120 mapowań, do tej pory
trzeba było obliczyć pojemność, dzieląc liczbę mapowań przez współczynnik obciążenia:
120 ÷ 0,75 = 160.
W Javie 19 możemy stworzyć mapę od razu z uwzglęnieniem współczynnika obciążenia, ponieważ przeliczenie wykonuje za nas metoda
newHashMap dostarczona razem z Javą.
To co się dzieje w ramach tej metody, wygląda następująco:
-
Pattern Matching for switch [preview]
W Javie 19 zostaje wprowadzona kolejna część zmian z cyklu obsługi dopasowania zmiennych do wzorca, czyli tzw. Pattern Matching.
W przypadku switch-a pierwsze zmiany pojawiły się w Javie 17.
Zachęcamy do przyjrzenia się, na czym polega to rozwiązanie w artykule Co nowego w Javie 17.
W najnowszej wersji Javy dodane zostały jedynie drobne usprawnienia.
Konkretnie została zmieniona składnia Guarded Pattern.
Na przykład zamiast warunku String text && text.length() > 10 używamy teraz słowa kluczowego when, czyli zamiast:
napiszemy teraz:
-
Record Patterns [preview]
Wzorce dopasowania pojawiały się już wcześniej (przed Javą 17) i były omawiane w kontekście na przykład operatora instanceof.
W Javie 19 mamy wprowadzone wzorce dla rekordów, a więc możemy teraz (w trybie preview)
wykorzystać rekord razem z operatorem instanceof.
Innymi słowy mając na przykład rekord Point, jesteśmy w stanie sprawdzić,
czy dany obiekt jest typu Point w ten sposób:
Zobaczmy jeszcze, jak to będzie wyglądać w kontekście wyrażenia switch:
Możliwe jest również zagnieżdżanie wzorców dopasowania dla rekordów, tzw. Nested Record Patterns.
-
Współbieżność strukturalna [incubator]
Współbieżność strukturalna ma na celu uproszczenie programowania wielowątkowego za pomocą strukturalnego interfejsu API dedykowanego współbieżności. Traktuje ona wiele zadań działających w różnych wątkach jako pojedynczą jednostkę pracy, usprawniając w ten sposób obsługę i anulowanie błędów.
Temu rozwiązaniu poświeciliśmy osobny artykuł kilka dni temu —
Współbieżność strukturalna w Javie 19
-
Vector API [incubator]
Vector API jest częścią JDK od wersji Java 16 jako inkubator i był dalej rozwijany w Javie 17 i Javie 18.
Nie ma on nic wspólnego z klasą java.util.Vector.
W rzeczywistości chodzi o nowe API do matematycznego obliczania wektorów i jego mapowania na nowoczesne procesory SIMD (Single-Instruction-Multiple-Data).
Java 19 dostarcza czwartą iterację, w której interfejs API został rozszerzony o nowe operacje wektorowe – a także możliwość przechowywania wektorów i odczytywania ich z segmentów pamięci
(funkcja interfejsu Foreign Function & Memory API).
-
Linux/RISC-V Port
RISC-V to bezpłatna i otwarta architektura zestawu instrukcji RISC (ISA),
zaprojektowana pierwotnie na Uniwersytecie Kalifornijskim w Berkeley,
a obecnie opracowana wspólnie pod patronatem RISC-V International.
Jest już obsługiwany przez szeroką gamę narzędzi językowych.
Stąd też przygotowywana jest obsługa rozwiązania z poziomu JDK.
Pełna lista zmian jest dostępna pod linkiem podanym na koniec rozdziału.
Tam też znajduje się wskazanie API, w którym pojawiła się metoda
newHashMap.
Java 19 okazuje się wersją, w której większość zmian znajduje się w przygotowaniu w ramach trybu preview lub nawet inkubatora.
Niemniej trend zmian jest bardzo pozytywny. Widać, że regularnie pojawiają się rozwiązania upraszczające
wykorzystanie języka. Na pewno warto je śledzić.
Szukasz dobrego kursu nowej Javy? Mamy dla Ciebie kurs oparty na 150 przykładach.
Kurs nowej Javy składa się z kursu Javy 8 oraz Javy od wersji 9 do 17.
Autor: Jarek Klimas
Data: 20 września 2022
Labele:Backend, Poziom podstawowy, Java
Linki:
openjdk.org/projects/jdk/19
HashMap API 19
Kod klasy HashMap w Javie 19 [Github]
Masz pytanie odnośnie zagadnienia omawianego w artykule?
Coś, co napisaliśmy, nie zaspokoiło Twojego głodu wiedzy?
Daj nam znać co myślisz i skomentuj artykuł na facebooku!