Objektno-orjentisano programiranje

Liste u Javi

Nizovi

Nizovi (arrays) u Javi predstavljaju strukture podataka koje omogućavaju skladištenje više elemenata istog tipa podataka u sekvenci.

Kreiranje nizova

Kreiranje nizova zahteva definisanje tipa elemenata niza i određivanje veličine niza. Ovi nizovi mogu biti referentnog tipa (kada se čuvaju u memoriji kao referenca) i imaju ugrađene metode za upravljanje podacima.

// Niz celih brojeva
int[] brojevi = new int[5]; // Kreiranje niza celih brojeva sa 5 elemenata

int[][] matrica = new int[5][5]; // kreiranje matrice 5x5

// Niz stringova
String[] reci = new String[10]; // Kreiranje niza stringova sa 10 elemenata

Prednosti nizova

Mane nizova

Ugrađene metode i svojstva za nizove

Ugrađene metode omogućavaju manipulaciju podacima u nizu:

  int duzinaNiza = brojevi.length; // Vraća dužinu niza brojevi

Metode koje nam olakšavaju rad sa nizovima su uglavnom statičke metode klase Arrays.

Neke od tih metoda su:

  int[] novaKopija = Arrays.copyOf(brojevi, 10); // Kopira niz brojevi u novuKopija sa dužinom 10
  Arrays.fill(brojevi, 0); // Popunjava niz brojevi sa nulama

Ostale metode možete pronaći na sledećem linku.

Nizovi kao referentni tip

U Javi, nizovi se smatraju referentnim tipom podataka. To znači da se referenca na niz skladišti u memoriji, a ne sami podaci. Kada se niz dodeljuje drugoj promenljivoj, zapravo se dodeljuje referenca na isti niz.

int[] niz1 = {1, 2, 3};
int[] niz2 = niz1; // niz2 sada pokazuje na isti niz kao i niz1

Korišćenjem ugrađenih metoda i svojstava, Java nudi praktične alate za rad sa nizovima. Važno je imati na umu da nizovi kao referentni tipovi mogu deliti iste podatke, što zahteva pažnju pri manipulaciji sa njima kako bi se izbegli neželjeni efekti.

Nizovi objekata

Ako postoji neki niz objekata koji je inicijalizovan, svih njegovi članovi će nakon inicijalizacije biti null. Zato je bitno da ako prolazimo po svim članovima niza koristeći petlju prvo pitamo da li je taj član različit od null i ukoliko jeste moguće je pristupiti svojstvima i metodama objekta. Drugi način bi bio da ne prolazimo po svim članovima niza nego čuvamo broj elemenata niza koji nisu null u nekoj promenljivoj.

Liste

Za razliku od nizova, liste su deo Java Collections Framework-a i pružaju dinamički pristup podacima, omogućavajući dodavanje, brisanje i izmenu elemenata bez potrebe za fiksiranjem veličine.

Generički tipovi

Generički tipovi (generic types) su deo Java programskog jezika koji omogućava kreiranje klasa, interfejsa i metoda koji su parametrizovani tipom podataka. Ovo omogućava programerima da napišu fleksibilniji i ponovno upotrebljiv kod koji može raditi sa različitim tipovima podataka.

Kroz korišćenje generičkih tipova, tip podataka se ne definiše unapred, već se određuje prilikom instanciranja objekta ili poziva metode. To omogućava veću apstrakciju i omogućava klasama i metodama da budu generičke u smislu tipova s kojima rade.

Na primer, generička klasa može izgledati ovako:

public class Kutija<T> {
    private T sadrzaj;

    public void postaviSadrzaj(T sadrzaj) {
        this.sadrzaj = sadrzaj;
    }

    public T dohvatiSadrzaj() {
        return sadrzaj;
    }
}

U ovom primeru, Kutija je generička klasa koja može sadržavati bilo koji tip podataka T. Prilikom instanciranja objekta, tip T se određuje. Na primer:

Kutija<String> stringKutija = new Kutija<String>();
Kutija<int> intKutija = new Kutija<int>();
stringKutija.postaviSadrzaj("Ovo je string");
intKutija.postaviSadrzaj(10);

Kroz generičke tipove, omogućeno je pisanje koda koji je manje specifičan za određeni tip podataka i omogućava veću ponovnu upotrebu koda za različite tipove. Generički tipovi se često koriste u kolekcijama, kao što su ArrayList, LinkedList itd., kako bi mogle raditi sa različitim tipovima podataka, omogućavajući sigurno tipiziranje i smanjujući potrebu za konverzijama tipova.

Implementacije List interfejsa

U okviru Java Collections Framework-a, List je interfejs koji definiše ponašanje za sekvencijalne strukture podataka. Neke od popularnih implementacija List interfejsa su:

Rad sa Listama

Kreiranje liste

List<String> lista = new ArrayList<String>(); // Kreiranje ArrayList instance
List<int> drugaLista = new LinkedList<int>(); // Kreiranje LinkedList instance

Dodavanje elemenata

lista.add("Prvi element");
lista.add("Drugi element");
lista.add("Treći element");

Pristupanje elementima

String prvi = lista.get(0); // Pristup prvom elementu liste

Postavljanje vrednosti elementa na određenom indeksu

int index = 1;
String value = "Test";
lista.set(index, value);

Iteriranje kroz listu

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

Brisanje elementa

lista.remove(1); // Brisanje elementa na indeksu 1

Ostale metode

Možete pronaći kompletnu listu metoda koje su deo List interfejsa u Javi na zvaničnoj Java dokumentaciji.

Prednosti korišćenja listi

Mane korišćenja listi

Korišćenje List struktura omogućava fleksibilnost i olakšava rad sa podacima, pružajući efikasne mehanizme za upravljanje i manipulaciju listom elemenata. Odabir između ArrayList i LinkedList zavisi od konkretnih zahteva i očekivanja performansi aplikacije.