Siemka, jak w tytule, mógłby mi ktoś wytłumaczyć kiedy i dlaczego stosujemy ArrayList, hashSet, HashMap oraz Collection?
Jest jakaś duża róznica między nimi?
Dziękuje!
HashSet
- jak chcesz stwierdzać, czy coś należy do jakiegoś zbioru bądź nie.
HashMap
- jak chcesz mieć jakiś zbiór, i powiązane z nim wartości, np. przyporządkowanie, że z "abc"
chcesz wiązać wartość "Ala ma kota"
, a z "bcd"
, "Kot ma alę"
. To jest wtedy taka tablica, tylko indeksami są dowolne haszowalne obiekty.
ArrayList
- jak chcesz mieć wiele obiektów po kolei, ale nie przejmuje cię szybkie wyszukiwanie w niej, tylko raczej szybka iteracja po niej. Albo, jak masz wiele obiektów i chcesz mieć je jakoś uporządkowane.
Collection
- to nie jest nic konkretnego, abstrakcyjna klasa na obiekty które w jakiś sposób są pojemnikiem na inne obiekty.
Odróżnijmy koncepcje podstawowe
List
Map
Set
(tu @enedil objaśnił co kiedy) *)
W niektórych językach o Map mówi się Dictionary, ale i tak to są powszechnie znane struktury danych
UPDATE: zarazem w pełni się zgodzę w komentarzem, że List Map i Set nie mają nic wspólnego (są jedynie kontenerami, i tylko to ich łączy). Dwie są Collecion, trzecia nie jest.
a ich implementacje (realizacje) przez array, hash, tree, linked (list) itd. Niektóre są szybsze do wstawiania, inne do odczytu/wyszukiwania, niektóre 'za darmo' sortują, inne dają kolejność przypadkową. To w jakimś sensie jest ważne, ale nie tak bardzo jak istota tych kontenerów
Np zwykle się pisze:
List lista = new ArrayList();
aby w dalszym kodzie się nie wikłać zagadnienia 'Array' tylko patrzeć na problem jako na List
*)
@Kacpi7 bez poszukania teoretycznej wiedzy nt struktur danych i stosownych algorytmów trudno pójść dalej
LinkedHashMap
- jeśli chcesz mieć kolejność wstawiania
TreeMap
- jeśli chcesz mieć kolejność wg klucza sortowania (naturalny lub specjalny)
HashMap
- jeśli nie interesuje Cię kolejność wyciągania
EnumMap
- jeśli kluczem ma być enum
ConcurrentHashMap
- jeśli chcesz się do mapy odwoływać wielowątkowo
no i Guava ArrayListMultimap
- jeśli chcesz mieć wiele wartości do tego samego klucza
Do poczytania:
https://en.wikipedia.org/wiki/Dynamic_array
https://docs.oracle.com/javase/8/docs/api/index.html?java/util/HashSet.html
https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html
https://en.wikipedia.org/wiki/Hash_table
https://en.wikipedia.org/wiki/Set_(abstract_data_type)
https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.