Różnica pomiędzy List<> i ArrayList<>

0

Co zyskujemy pisząc

List<?> myList = new ArrayList<?>();

zamiast

ArrayList<?> myList = new ArrayList<?>();
2

W pierwszej opcji nie ograniczasz się do jednej implementacji.

Zauważ że List to jest interfejs. Pisząc z lewej strony List możesz potem do tej zmiennej podstawić inna implementacje List, a nie tylko ArrayList.

2
Alexandr.r napisał(a):

Co zyskujemy pisząc

List<?> myList = new ArrayList<?>();

zamiast

ArrayList<?> myList = new ArrayList<?>();

W takiej formie właściwie nie ma różnicy. Większość pisze to co jest krótsze.

Natomiast podczas deklarowania parametrów, lepiej zadeklarować przyjmowanie List<> zamiast ArrayList<>, by móc przekazać polimorficznie dowolną implementację List.

0
Riddle napisał(a):

W takiej formie właściwie nie ma różnicy. Większość pisze to co jest krótsze.

Ogólnie zgoda, natomiast jest jeden mały fakt: zapis ogólny oznacza, że nie można wykorzystać metod właściwych dla ArrayList.

Inna sprawa, że pisanie tego, co jest krótsze nie zawsze jest dobre. Czasami lepiej napisać ArrayList<?> myList = new ArrayList<>(capacity) by dać światu znać, że kod został napisany z myślą o ArrayList.

0
wartek01 napisał(a):
Riddle napisał(a):

W takiej formie właściwie nie ma różnicy. Większość pisze to co jest krótsze.

Ogólnie zgoda, natomiast jest jeden mały fakt: zapis ogólny oznacza, że nie można wykorzystać metod właściwych dla ArrayList.

Jeśli chcemy wykorzystać metod właściwych dla ArrayList, to całe to pytanie nie ma sensu.

0

Let me Chat GPT that for you: screenshot-20230320062852.png

6

@0xmarcin: Nie lubię tych odpowiedzi z ChatGPT, bo one się dzielą na dwie kategorię.

Zadajesz pytanie, i bot odpowiada:

Skąd pytający ma wtedy wiedzieć czy chat odpowiedział coś poprawnie czy jakiś bezsens?

0

W programowaniu warto określać to co myślisz najlepiej jak się da. Jeśli w danym miejscu nie dbasz o to jakiej implementacji listy używasz to użyj generycznego typu. W praktycznie każdym wypadku tak jest, bo wybór implementancji jest zazwyczaj podyktowany charakterystyką wydajnościową i jej użycie jest takie samo niezależnie od implementacji pod spodem

0
Alexandr.r napisał(a):

Co zyskujemy pisząc

List<?> myList = new ArrayList<?>();

zamiast

ArrayList<?> myList = new ArrayList<?>();

Tak na prawdę powinieneś zrobić krok wstecz i zapoznać się z polimorfizmem, bo na tym polega cała sztuczka. Bez tego ani rusz.

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