Cześć
w dzisiejszym artykule opowiem trochę o kolekcjach, o ich różnych implementacjach oraz trochę o wydajności (bardzo częste pytanie na rozmowach kwalifikacyjnych)

Co to są kolekcje

Kolekcje  w języku Java to takie byty które rozszerzają interfejs Collection

Rodzaje kolekcji

Listy (java.util.List)
– w przeciwieństwie do tablicy programista nie musi się martwic o jej rozmiar (jest dynamiczny)
– jeden element może występować kilka razy na różnych pozycjach
Zbiory (java.util.Set)
– mają tylko unikalne elementy (ten sam obiekt nie może się pojawić dwa razy)
– kolejność dodawania elementów do zbiorów nie ma znaczenia bo i tak w momencie iterowania po zbiorze możemy dostać inna kolejność (są implementacje w których mamy zachowany porządek elementów ale to nie jest cecha charakterystyczna zbioru)
Kolejki (java.util.Queue)
– listy o por zadku przetwarzania FIFO(First in, first out) co znaczy ze elementy zawsze dodawane są na koniec kolejki końca (wyjątek kolejki priorytetowe0

Najpopularniejsze implementacje

 

Listy

ArrayList – implementacja oparta na tablicy (stąd nazwa). Bardzo dobra, jeżeli operacje odczytu losowych elementów wykonujemy dużo częściej niż operacje dodawania czy usuwania
LinkedList – dane są ze sobą „powiązane”, dlatego lepsza w momencie, w którym częściej dodajemy elementy i iterujemy po niej

Zbiory

HashSet – oparta o hash tablice. Nie gwarantuje ze przy każdej iteracji zbiory kolejność będzie taka sama
TreeSet – oparta na strukturze drzewa. Posortowana w naturalnym porządku (jest możliwość ustalenia porządku elementów przy użyciu interfejsu Comparator)

Kolejki

ArrayDeque – nie ma ograniczeń rozmiaru oraz nie jest bezpieczna wątkowo
PriorityQueue – wyjątek o którym wspominałem wcześniej – co prawda jest to kolejka ale elementy są przechowywane w naturalnym porządku (tutaj tez możemy to zmienić przy użyciu interfejsu Comparator).

Wydajność

Jeżeli chodzi wydajność kolekcji to bardzo polecam artykuł:
http://infotechgems.blogspot.ie/2011/11/java-collections-performance-time.html

 

Listy

Zbiory

Kolejki

Cześć.
Częstym problemem spotkanym podczas operowania na danych bazy jest konieczność przechowywania danych w inny sposób w obiekcie encji, a inny w bazie danych.
Na rozwiązanie tego problemu jest kilka sposobów. Dzisiaj przedstawię wam metodę wprowadzona w JPA 2.1, nazywaną Attribute Converter.

Czytaj dalej

Cześć.

Przed wami kolejny artykuł dotyczący standardu mapowania obiektowo-relacyjnego w Javie, którym jest JPA, a właściwie jego aktualnie najbardziej popularną implementacją,  jaką jest Hibernate.

W tym poście zajmę się częstym problemem zwanym „n+1 Select Problem”.
Czytaj dalej

Ostatnio bardzo dużo czasu musiałem poświecić na zrozumienie mechanizmów JPA, a w szczególności aktualnie najbardziej popularnej implementacji o nazwię Hibernate.
Dlatego postanowiłem napisać kilka postów związanych z tym tematem.
W pierwszym z nich zaprezentuje wam rodzaje pamięci podręcznych, które są wykorzystywane w Hibernate. Głownie skupie się na różnicy między L1 Cache i L2 Cache, ale wspomnę również o Query Cache.
Czytaj dalej

Cześć.

W poprzednim artykule wyjaśniałem różnicę między adnotacjami, których zadaniem jest wstrzykiwanie zależności.
Niestety, obiekty, które chcemy wstrzykiwać, nie są tworzone „automagicznie”, musimy je utworzyć np. poprzez  adnotacje.
W tym poście postaram się wyjaśnić różnice między:
–  @Component
–  @Service
–  @Repository
–  @Controller

Czytaj dalej

Cześć.

Aktualnie na blogu powstaje ciąg artykułów związanych z wzorcami projektowymi i pewnie już macie ich dość, dlatego postanowiłem zrobić krótką przerwę. Ze względu na to, że Spring jest teraz na topie, a poza tym bardzo lubię tę technologię, pomyślałem, że napiszę parę postów, które będą się z nim wiązać.

Ostatnio ktoś zapytał mnie o różnicę między adnotacjami @Autowired oraz @Resource i wydaję mi się, że jest to dobry pomysł, aby wyjaśnić różnicę między nimi. Do porównania dorzucę jeszcze adnotację @Inject, ponieważ ma takie samo zastosowanie jak dwie powyższe.

Czytaj dalej