Java Collection | ArrayList, HashSet, HashMap

Java collection

Java kolekcje (ang. collections) – W Javie mamy do dyspozycji tablice. Mają one jednak trochę wad i nie zawsze łatwo współpracuję się z nimi. Dodawanie lub usuwanie elementów, może być udręką (szczególnie praca z indeksami) 😫. Jestem zdania, że tam, gdzie jest to możliwe, życie należy sobie ułatwiać/upraszczać. Tak jest i w tym przypadku. Java oferuję, można trochę powiedzieć tablicę na sterydach 💪, czyli kolekcje. Kolekcje takie jak np. listy to towarzysze, z którymi współpracuję się zdecydowanie bardziej przyjemnie – oferują one metody, które nie dość, że znacznie zmniejszają linie kodu/ilość linii kodu, to jeszcze sprawiają, że praca z nimi jest naprawdę przyjemna.

Java – Collection – wprowadzenie

Z tego materiału dowiesz się:

  • Czym klasa Collection?
  • Co jest lepsze ArrayList czy tablica?
  • Jakie cechy ma Lista?
  • Co charakteryzuje Set?
  • Czym jest mapa?

Java Collection – Kolekcje w Javie

Kolekcja to pojedyncza jednostka np. lista, która reprezentuję grupę pojedynczych obiektów np. zwierząt 🐘🦧🦥. Zdecydowanie jest to spora analogia do tablic. Jest tak nie bez powodu, ponieważ pod prawie każdą kolekcją kryje się tak naprawdę tablica.

W Javie dla kolekcji został utworzony, osobny framework o nazwie „Collections Framework”, który mieści w sobie wszystkie klasy i interfejsy kolekcji.

Kolekcje mogą wykonywać różne operacje na grupie przechowywanych obiektów takie jak np. dodawanie, usuwanie, wyszukiwanie oraz sortowanie obiektów.

Java Collection – metody

Interfejs Collection posiada szereg metod, które możesz wykorzystywać w dowolnej kolekcji:

  • add() – dodaje wskazany element do kolekcji
  • addAll() – dodaje do kolekcji wszystkie elementy wskazanej przez nas kolekcji
  • remove() – usuwa wskazany element z kolekcji
  • removeAll() – usuwa z kolekcji wszystkie elementy wskazanej przez nas kolekcji
  • size() – zwraca rozmiar kolekcji
  • clear() – usuwa wszystkie elementy kolekcji
  • iterator() – zwraca iterator dostępu do elementów kolekcji
//add
ArrayList<User> users = new ArrayList<>();
users.add(new User("Tomek", "Woliński"));
users.add(new User("Mateusz", "Laskowski"));

ArrayList<User> femaleUsers = new ArrayList<>();
femaleUsers.add(new User("Kasia","Kowalska"))
femaleUsers.add(new User("Ania","Nowak"));

ArrayList<User> maleUsers = new ArrayList<>();
maleUsers.add(new User("Tomek", "Woliński"));
maleUsers.add(new User("Mateusz", "Laskowski"));
System.out.println(users); 

//addAll
users.addAll(femaleUsers);
System.out.println(users);

//remove
users.remove(new User("Kasia", "Kowalska"));
System.out.println(users);

//removeAll
users.removeAll(maleUsers);
System.out.println(users);

Java List| ArrayList| LinkedList

Lista (ang. list) to uporządkowana kolekcja, w której wartości mogą wystąpić więcej niż jeden raz. Najczęściej wykorzystywanymi typami list są:

  • ArrayList,
  • LinkedList.
 
ArrayList<String> animals = new ArrayList<>(); 

//add 
animals.add("Cat"); 
System.out.println(animals); 

//get 
String animal = animals.get(0); 
System.out.println(animal); 

//set 
animals.set(0,"Dog"); 
System.out.println(animals);

Java ArrayList vs. tablica (ang. array)

Lista lepsza od tablicy? Zdecydowanie przydałyby się dowody na tę tezę 😊 Spójrz jak wyglądałoby dodanie elementu na ostatniej pozycji w tablicy:

int numbers[] = { 1, 2, 3, 4, 5 };
 System.out.println(Arrays.toString(numbers));

int i;
int newArray[] = new int[numbers.length + 1];
for (i = 0; i < numbers.length; i++){
    newArray[i] = numbers[i];
    newArray[numbers.length] = 6;
}
    numbers = newArray;
    System.out.println(Arrays.toString(numbers));

Trochę linii jest, plus trzeba się chwilę nagłówkować, żeby w ogóle przekopiować jedną tablicę na drugą.
Co ma za to w swojej kontrofercie lista?

List<Integer> listOfnumbers = new ArrayList<>();
listOfnumbers.add(3);
listOfnumbers.forEach(System.out::println);

Kilka linijek kodu, wszystko jest czytelne już przy pierwszym spojrzeniu. Mam nadzieje, że to wystarczająco przekonało Cię do tego, żeby sięgnąć po listę.

Java ArrayList | LinkedList

W ramach tego materiału zajmiemy się przede wszystkim ogólnym zagadnieniem kolekcji (ang. collections) – natomiast kompletny materiał dotyczący list w tym ArrayList i LinkedList znajdziesz poniżej.

➡ ZOBACZ 👉: Java List| ArrayList| LinkedList

Java Set| HashSet| TreeSet

Set jest nieuporządkowaną kolekcją obiektów. Co to właściwie znaczy? 🤔

  • Elementy w secie nie mają określonej kolejności,
  • Nie można wskazać pozycji, w której chcielibyśmy dodać element,
  • Nie można uzyskać dostępu do elementów przez ich indeks.

⚠️ W Secie nie można przechowywać zduplikowanych wartości, dotyczy to również wartości null⚠️

Najczęściej wykorzystywanymi typami setów są:

  • HashSet
  • TreeSet 🌳  (przechowuje posortowane elementy)

Jedną z metod set’u jest iterator(), dzięki której możliwe jest iterowanie się po elementach set’u.

Co jeżeli chciałbyś użyć pętli?🤔➿

Jest to możliwe, ale wyłącznie z pętlą for each – zarówno tradycyjną jak i metodą forEach().

for (String animal : animals) {
   System.out.println(animal);
}
animals.forEach(System.out::println);

➡ ZOBACZ 👉: Pętla (for, while, do while, foreach) pętle | Kurs Java

W odróżnieniu od list Set nie posiada np. takich metod jak get() lub set(), ponieważ w secie nie można odnieść się do indeksu.

Java – ArrayList vs. HashSet

Do listy możesz dodać różne elementy lub nawet kilka takich samych – wszystko, co do niej dodasz (Oczywiście zgodnie z typem przyjmowanych parametrów przez listę), pojawi się w liście. Jak dodasz „Cat” na pierwszej pozycji, a  „Mouse” na ostatniej to możesz mieć pewność, że znajdziesz te elementy pod odpowiednim indeksem.

ArrayList<String> animalsList = new ArrayList<>();
animalsList.add("Cat");
animalsList.add("Dog");
animalsList.add("Cat");
animalsList.add("Cat");
animalsList.add("Dog");
animalsList.add("Mouse");

System.out.println(animalsList.size()); //6

animalsList.forEach(System.out::println); //Cat, Dog, Cat, Cat, Dog, Mouse

Dodając do set’u elementy, nie ma znaczenia, ile będziesz próbował, dodać duplikatów to i tak tylko jeden dany element pojawi się w secie. Pamiętaj również, o tym, że ostatni dodany element w secie nie koniecznie musi pojawić się na końcu set’u – jest to nieuporządkowana kolekcja – nie mamy wpływu na pozycję danego elementu.

HashSet<String> animalsSet = new HashSet<>();
animalsSet.add("Cat");
animalsSet.add("Dog");
animalsSet.add("Cat");
animalsSet.add("Cat");
animalsSet.add("Dog");
animalsSet.add("Mouse");

System.out.println(animalsSet.size()); // 3

animalsSet.forEach(System.out::println); 
// Przykładowo (ponieważ kolejność nie jest z góry nam znana): Mouse, Cat, Dog 

 

Java Collection – Interface Collection

Interfejs Collection jest głównym interfejsem frameworka kolekcji w Javie.

 

java collection linkedList arrayList HashSet Queue

 

Java Map | HashMap

Mówiąc o kolekcjach, warto również wspomnieć o mapie. Należy ona również do „Collections Framework”. Nie dziedziczy ona po Collection jednak można powiedzieć, że towarzyszy kolekcjom krok w krok 😎.

Co warto wiedzieć o mapie ?

  • Elementy mapy są przechowywane w parach klucz -> wartość,
  • Klucze są unikalnymi wartościami związanymi z poszczególnymi wartościami,
  • Mapa nie może zawierać zduplikowanych kluczy,
  • Każdy klucz może być związany tylko z pojedynczą wartością.

Najczęściej korzysta się z HashMap’y.

Java HashMap – Metody

 
HashMap<Integer, String> animals = new HashMap<>();

//put - dodawanie elementów
animals.put(1, "Cat");
animals.put(2, "Dog");
animals.put(3, "Mouse");

System.out.println(animals);

//remove - usuwanie elementów po kluczu
animals.remove(2);

//get - dostęp do wartości po kluczu
String animal = animals.get(1);
System.out.println(animal);

//keySet() - lista wszystkich kluczy
Set<Integer> keys = animals.keySet();
keys.forEach(System.out::println);

//values - lista wszystkich wartośći
Collection<String> values = animals.values();
values.forEach(System.out::println);

//entrySet - zwraca pary klucz -> wartość
System.out.println(animals.entrySet());

Iterowanie po mapie jest możliwe w pętli for each. Jest trochę „złożone” niż iterowanie się np. po liście, ponieważ iterujemy się po parze obiektów.

 
for (Map.Entry<Integer, String> entry : animals.entrySet()) {
    System.out.println("Klucz: " + entry.getKey() + " Wartość: " + entry.getValue());

Java – Collection – podsumowanie

W ramach tego materiału dowiedzieliśmy się, czym jest kolekcja i jakie typy kolekcji oferuję Java. Bliżej zapoznaliśmy się różnicami pomiędzy ArrayList’ą oraz tablicą, a także pomiędzy poszczególnymi typami kolekcji.

Jeżeli chcesz kontynuować swoją przygodę z Javą i poznać inne struktury, które oferuję ten język programowania – to zapraszam do zapoznania się z różnymi tematami z serii o Javie.
➡ ZOBACZ 👉: Kurs Java | Darmowy Kurs Programowania w Javie

Kierunek Java

W serii o Javie zapoznajesz się z podstawowymi tematami o Javie. Jeżeli chcesz bardziej kompleksowo zagłębić się w temat Javy, poczytać, posłuchać o Javie, to zachęcam Cię do zapoznania się z moim kursem „Kierunek Java”:

➡ ZOBACZ 👉: Kierunek Java

 


20+ BONUSOWYCH materiałów z programowania

e-book – „8 rzeczy, które musisz wiedzieć, żeby dostać pracę jako programista”,
e-book – „Java Cheat Sheet”,
checklista – „Pytania rekrutacyjne”
i wiele, wiele wiecej!

Jak zostać programistą

No comments
Share:

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *