Różnice w deklaracji kolekcji.

0

Witam. Mam takie pytanko odnośnie kolekcji. W sumie kilku, ale przedstawie na konkretnym przykładzie. Czym się różni taka deklaracja:

TreeSet<String> zbior = new TreeSet<>();

od takiej:

SortedSet<String> zbior = new TreeSet<>();

Obydwie na pierwszy rzut oka działają tak samo :)

1

Różni się tym że ta druga jest bardziej "ogólna". Tzn wyobraź sobie że napisałeś cały kod z użyciem TreeSet wszędzie a nagle postanawiasz że chcesz inny zbiór, bo TreeSet jest za wolny. I co? I masz problem bo musisz w całym kodzie zmienić ten set na inny.
A teraz wyobraź sobie że masz wszędzie SortedSet, czyli opierasz się tylko na tym że korzystasz z jakiegoś posortowanego zbioru. Możesz wtedy bezboleśnie podmienić ten set na inny, o ile też jest posortowany i kod nadal będzie działał.

0

Dobra chyba kumam.
Chodzi o to, że jeżeli używam SortedSet mam pewność, że używam metod które definiuje ten interfejs. Jeżeli zaś używam TreeSet mogę też bez problemu używać metod zawartych w tej klasie.
Problem zaczyna się gdy np. w kodzie używam w programie:
TreeSet<String> zbior = new TreeSet<>();
referencji do kolekcji "zbior" 100 razy lub więcej i korzystam z metod zdefiniowanych w klasie TreeSet. teraz gdybym chciał zamienić TreeSet na np. HashSet mam problem, ponieważ metody z TreeSet mogą nie pasować. Dobrze myślę?

1

Tak, własnie o to chodzi. Generalnie dobrą praktyką jest korzystać z najbardziej ogólnego interfejsu bo daje ci to najwięcej elastyczności.

0

Wielkie dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1