• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java, znaczenie pola "final", klasa z polem kontenera TreeSet.

Object Storage Arubacloud
0 głosów
136 wizyt
pytanie zadane 1 września 2020 w Java przez amtrax Dyskutant (9,630 p.)

Cześć, 

Jednym z pól klasy jest kontener TreeSet.

 private  final TreeSet<T> set;

Moje pytanie dotyczy tego, co daje modyfikator final, mimo jego obecności dalej mogę m. in. dodawać i usuwać wartości poprzez metody. Sam kompilator podpowiadał użycie final

Pozdrowienia 

1 odpowiedź

+1 głos
odpowiedź 1 września 2020 przez jankustosz1 Nałogowiec (35,880 p.)
wybrane 1 września 2020 przez amtrax
 
Najlepsza
To oznacza, że nie możesz przypisać set do innego TreeSet niż to które ustawiłeś przy starcie. Czyli jakby jest to const dla referencji. Wskazuje na jeden element, który może się zmieniać, ale nie można zmienić wskazywania na inny element. Chyba zrozumiałeś.
komentarz 1 września 2020 przez amtrax Dyskutant (9,630 p.)

Dziękuje za wytłumaczenie :D

 

PS. 

jaka jest różnica między: 

SortedSet<Integer> example = new TreeSet<Integer>();

a po prostu:

TreeSet<Integer> example = new TreeSet<Integer>();

 

1
komentarz 1 września 2020 przez jankustosz1 Nałogowiec (35,880 p.)
Nie znam javy ale z tego co na szybko wyczytałem to SortedTree jest tylko interfejsem, czyli taką jakby klasą abstrakcyjną. TreeSet jest implementacją metod SortedSet w jakiśtam sposób. Niczym się te 2 przykłady nie różnią, lepiej chyba używać SortedSet, ponieważ nie ogranicza Cię tylko do używania tej jednej implementacji i w każdym momencie możesz zmienić TreeSet na np. NavigableSet i pozostały kod będzie działał.

Możliwe też jest że TreeSet będzie miał dodatkowe metody których nie ma SotedTree, ale raczej najważniejsze, wystarczające rzeczy powinny być w SortedTree
komentarz 1 września 2020 przez Wiciorny Ekspert (269,770 p.)

interfejsem, czyli taką jakby klasą abstrakcyjną. 

Nie myl tych dwóch pojęć interfejs to nie jest klasa abstrakcyjna, ani klasa abstrakcyjna to nie interfejs. SortedTree to interfejs natomiast TreeSet to jest klasa i ona nie implementuje SortedTree 
 

komentarz 2 września 2020 przez jankustosz1 Nałogowiec (35,880 p.)
Interfejs to jest ograniczona klasa abstrakcyjna, można każdy interfejs przerobić na klasę abstrakcyjną, więc jako tako jest jej podzbiorem. Inna sprawa, że w wielu językach nie ma wielokrotnego dziedziczenia, a można implementować wiele interfejsów.

TreeSet implementuje NavigableSet, które zaś rozszerza SortedTree, więc TreeSet jest klasą pochodną SortedTree. Gdyby TreeSet nie implementował SortedTree pierwszy przykład podany przez autora pytania by nie działał.
komentarz 2 września 2020 przez amtrax Dyskutant (9,630 p.)

@Wiciorny,

Widzę, że masz doświadczenie w Javie. Jakie Twoim zdaniem jest zastosowanie takiej konstrukcji: 
 

SortedSet<Integer> example = new TreeSet<Integer>();

zamiast po prostu TreeSet.....

1
komentarz 2 września 2020 przez jankustosz1 Nałogowiec (35,880 p.)

Już przecież Ci na to odpisałem, ale powtórzę trochę jaśniej.

Jest interfejs Set który gwarantuje, że klasy go implementujące posiadają metody które on zawiera. Mamy np. HashSet, LinkedHashSet, TreeSet które pośrednio lub bezpośrednio go implementują. Używając Set jako typ obiektu nie przejmujesz się czy to HashSet czy np. TreeSet. Funkcja może np. przyjąć obiekt typu Set, a decyzja już użytkownika funkcji czy poda do niej HashSeta czy TreeSeta(co robi róznicę w wydajności)

Czasami zdarza się jednak, że chcemy aby Set przechowywał dane w sposób posortowany, a jak wiadomo HashSet tego nie robi. Wtedy zamiast Set możemy użyć SortedSet i teraz możemy wrzucić w jego miejsce wszystkie implementacje Seta które mają posortowane elementy jak TreeSet lub ConcurrentSkipListSet.

Podobne pytania

0 głosów
1 odpowiedź 142 wizyt
pytanie zadane 14 września 2020 w PHP przez Assasz Nałogowiec (30,460 p.)
0 głosów
0 odpowiedzi 79 wizyt
pytanie zadane 18 kwietnia 2020 w C# przez weats Początkujący (470 p.)
0 głosów
1 odpowiedź 746 wizyt
pytanie zadane 18 listopada 2016 w Java przez Lukasz95 Bywalec (2,160 p.)

92,566 zapytań

141,420 odpowiedzi

319,615 komentarzy

61,952 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...