Java #31: lista (tablica dynamiczna)

W poprzednim wpisie napisałem mały wstęp do kolekcji, w tym także do tablicy dynamicznej (lub inaczej lista). Teraz postaram się przybliżyć funkcjonalność struktury, którą na pewno będziesz używać podczas Twojej pracy jako programista.

ArrayList<String> arrayList = new ArrayList<String>();

W ten sposób możesz stworzyć swoją pustą tablicę dynamiczną (lub w skrócie listę).

Lista jednokierunkowa

Użyłem tutaj klasy ArrayList, która przechowuje implementację dla listy jednokierunkowej*. Klasa ta jest klasą generyczną**, co oznacza, że jest kontenerem dla innego obiektu. Jak widzisz w kodzie, który napisałem, zarówno przy deklaracji, jak i definicji znajdują się znaki mniejszy – większy (<>), pomiędzy którymi umieszczasz inną nazwę klasy. W ten sposób decydujesz na jakim rodzaju obiektów chciałbyś pracować. Na przykład, jeśli potrzebujesz listę zarobków swojej firmy, to napiszesz: ArrayList<Integer>, co oznacza tablicę dynamiczną liczb całkowitych. Musisz pamiętać, że generyki mają jedną znaczącą różnicę w stosunku do tablic – mogą zawierać tylko typy obiektowe. Także nie da się stworzyć np. ArrayList<int> jest niepoprawne, inaczej niż w przypadku klasycznych tablic. Musisz tu zawsze używać typów opakowujących (np. Double, Long, Integer, itp.).

Interfejs zamiast implementacji

Ponieważ wiesz, że zgodnie z zasadą polimorfizmu w deklaracji zmiennej można używać interfejsu zamiast implementacji, to swój kod możesz poprawić w ten sposób:

List<String> list = new ArrayList<String>();

To jest dużo lepsze, ponieważ wpierw działasz na abstrakcji, a dopiero później wskazujesz konkretną implementację interfejsu. Dodatkowo od Javy w wersji 7 (praktycznie wszystkie projekty komercyjne używają co najmniej tą wersję) możesz skrócić zapis i nie powtarzać rodzaju obiektu, który będzie używany przez klasę generyczną po stronie jej definicji. Czyli kolejnym uproszczeniem będzie:

List<String> list= new ArrayList<>();

Podstawowe operacje

Tak stworzona lista, przypominam, w przeciwieństwie do tablicy nie ma od górnie ustalonego rozmiaru. Teraz dodaj jakieś elementy do niej.

list.add("Pierwszy");
list.add("Drugi");
list.add("Trzeci");

Dodałem sobie trzy elementy. Nie muszę, tak jak w przypadku tablic, pisać indeksu bo oczywiste jest, że indeksuje każdy dodany element od wartości 0 wzwyż. Jeśli chcesz dodać element z indeksem, to wtedy piszesz:

list.add(4, "Czwarty");

W podobny sposób możesz usuwać elementy.

list.remove("Czwarty");

Albo:

list.remove(list.indexOf("Trzeci"));

Tutaj usuwasz wpisując numer indeksu. Jeśli go nie znasz (lub nie pamiętasz), najłatwiej go zlokalizować używając metody indexOf w nawiasie wpisując nazwę elementu.

Teraz chcę podejrzeć co jest lista zawiera na pierwszej pozycji.

System.out.println(list.get(0));

Przejrzenie całej listy można łatwo zrobić używając pętli for-each.

for (String element : list) {
	System.out.println(element);
}

Czasami chcesz użyć konkretnego warunku, żeby wykonać jakąś akcję.

if(list.contains("Drugi")) {
        System.out.println("Lista posiada drugi element");
}

Pamiętasz, że lista może zawierać zduplikowane elementy?

list.add("Drugi");
if(list.contains("Drugi")) {
        System.out.println("Lista posiada drugi element");
}

Ponieważ wcześniej już na liście znajdował się element o nazwie „Drugi”, rezultat w konsoli powinien wyglądać tak:

Lista posiada drugi element
Lista posiada drugi element

Jak wiesz listy i tablice są odzwierciedleniem siebie, także w Javie jest prosty sposób, aby jedną strukturę zmapować na drugą.

String[] array = list.toArray(new String[0]);
List<String> listFromArray = Arrays.asList(array);

Jeśli chcesz stworzyć nową listę z pewnego zakresu danych zawartych w poprzedniej, to możesz to zrobić używając subList.

List<String> mySubList = listFromArray.subList(0, 2);

Sprawdzenie rozmiaru nowej listy wykonasz funkcją size

mySubList.size();

Ostatnią rzeczą, którą chciałbym Ci pokazać jest czyszczenie tablicy przy wcześniejszym sprawdzeniu, czy nie jest pusta.

if (!list.isEmpty()) {
	list.clear();
}

To wszystko w tej lekcji. Powyższe informacje powinny na razie wystarczyć Ci do swobodnej pracy na listach.

*Istnieje też lista dwukierunkowa (LinkedList).

**Więcej o klasach generycznych znajdziesz w kursie Java zaawansowane.

Link do kodu: https://github.com/developeronthego/java-middle/blob/master/src/main/java/middle/lesson14

Stay in the Loop

Get the daily email from CryptoNews that makes reading the news actually enjoyable. Join our mailing list to stay in the loop to stay informed, for free.

Ostatnio dodane

- Advertisement - spot_img

Powiązane wpisy