[Java]Pitanje oko kolekicja

C, C++, Java, PHP, Ruby...

Moderator/ica: Moderatori/ce

Pravila foruma
U naslovu teme unutar uglatih zagrada navesti o kojem jeziku je riječ. Primjer: [Java]
Odgovori
MarkoN
Postovi: 12
Pridružen/a: 18 lip 2014, 19:04
Spol: m
OS: Windows

[Java]Pitanje oko kolekicja

Post Postao/la MarkoN »

Dobio sam primer kako treba da uradim svoju kolekciju,ali u kodu mi nisu jesne neke stvari,pa ako neko zna da mi malo pojasni.Nije mi jasan ovaj deo:private E[] lista = (E[]) new Object[duzina];jel mora E lista?jel moze mozda Arrey?
takodje na znam za sta tacno sluzi System.arraycopy

public class RadosKolekcija<E> implements RadosKolekcijaInterface<E> {

private int duzina = 0;
private E[] lista = (E[]) new Object[duzina];

/**
* Prazan konstruktor.
*/
public RadosKolekcija() {
}
/*
* Brise element iz liste koji se nalazi na zadatom indeksu.
*/

private void brisanjeElementa(int index) {
int num = duzina - index - 1;
if (num > 0) {
System.arraycopy(lista, index + 1, lista, index, num);
}
lista[--duzina] = null;
}
/*
* Proverava da li zadati indeks izlazi iz opsega liste i ako izlazi
* baca IndexOutOfBoundsException.
*/

private void proveriIndex(int index) {
if (index >= duzina || index < 0) {
throw new IndexOutOfBoundsException("Indeks je van opsega liste.");
}
}

@Override
public void dodajRados(E obj) {
lista = Arrays.copyOf(lista, ++duzina);
lista[duzina - 1] = obj;
}

@Override
public E uzmiRados(int index) {
proveriIndex(index);
return lista[index];
}

@Override
public void ukloniRados(E obj) {
for (int i = 0; i < duzina; i++) {
if (lista.equals(obj)) {
brisanjeElementa(i);
break;
}
}
}

@Override
public E ukloniRados(int index) {
proveriIndex(index);
E uklonjen = lista[index];
brisanjeElementa(index);
return uklonjen;
}

@Override
public void izmeniRados(int index, E obj) {
proveriIndex(index);
lista[index] = obj;
}

@Override
public void isprazniRados() {
for (int i = 0; i < duzina; i++) {
lista = null;
}
duzina = 0;
}

@Override
public int brElemenataRados() {
return duzina;
}

@Override
public E dajPrviRados() {
if (duzina == 0) {
throw new NullPointerException("Lista je prazna.");
}
return lista[0];
}

@Override
public E dajZadnjiRados() {
if (duzina == 0) {
throw new NullPointerException("Lista je prazna.");
}
return lista[duzina - 1];
}
}
Avatar
Medojedni jazavac
Postovi: 1536
Pridružen/a: 22 tra 2012, 08:55
Spol: M
OS: eOS Luna
Lokacija: ForHill Croatia
Kontakt:

Re: [Java]Pitanje oko kolekicja

Post Postao/la Medojedni jazavac »

Cim uhvatim vrijeme ti budem pogledal i objasnil kaj treba. Racunaj danas ili sutra.

Nego, daj molim te kad stavljas kod stavi ga u

Kod: Označi sve

 tag ko u proslom postu.
stefan je napisao/la:tu mač gemišta
To understand recursion, you must first understand recursion.
Avatar
Medojedni jazavac
Postovi: 1536
Pridružen/a: 22 tra 2012, 08:55
Spol: M
OS: eOS Luna
Lokacija: ForHill Croatia
Kontakt:

Re: [Java]Pitanje oko kolekicja

Post Postao/la Medojedni jazavac »

Ola senior, dobro dosel u kratki uvod u Java kolekcije.

Sto su zapravo Java kolekcije? Jednostavno receno, to je neki objekt u kojem ti cuvas neke druge objekte. Npr. stvari iz ducana u vrecici, stari playboyi u kutiji. Sad bitno je shvatiti kaj je kaj u ovoj analogiji.

Pogledajmo prvo definiciju razreda:

Kod: Označi sve

public class RadosKolekcija<E> implements RadosKolekcijaInterface<E> {
Sto nam oznacava ovaj <E> ? To je nista drugo nego zamjena za neki tip objekta koji nam nije treutno poznat, a on se odredjuje u trenutku stvaranja kolekcije. Smisao ovoga je da mozes ovu kolekciju koristiti nad svim objektima bez da eksplicitno navodis tipove.

Posljedica toga je da ti sad tu svoju kolekciju mozes koristiti na primjer na sljedece nacine:

Kod: Označi sve

RadosKolekcija<String> mojaKolekcija = new RadosKolekcija();
RadosKolekcija<Integer> mojaKolekcija = new RadosKolekcija();


Ili jos bolje, kolekcija u kolekciji... zakaj ne!

Kod: Označi sve

RadosKolekcija<RadosKolekcija> mojaKolekcijaUKolekciji = new RadosKolekcija();


Dobra stana kolekcijskih sucelja i njihovih implementacija
Sad dolazimo na dio sa ovim private arrayom.

Vidim da imas definirano RadosKolekcijaInterface. TO JE ODLICNO! Zasto? Zato jer mozes svoju kolekciju implementirati na razne nacine!

Pogledajmo primjer iz Java svijeta. Kolekciju List.
Ak pogledas list je nista drugo nego sucelje, ali trenutno u Java SDK postoje 2 implementacije. ArrayList i LinkedList.

Zasto je to dobro? Ti mozes u kodu svugdje koristiti List ko tip. (u argumentima metoda i sl) ali sama implementacija ti u tom trenutku nije bitna.

ArrayList npr koristi obizni niz E[] ko ti, dok LinkedList koristi vezanu listu. Jedno je brze pri dohvatanju elementa, drugo je brze pri dodavanju i slicno. Zato je dobro imat vise implementacija.

Zato pogledajmo tvoju implementaciju. Ona je mogla koristiti Array. Zasto ne? Ali u tvom jednostavnom slucaju koristi obicni java niz E[]. Nis lose u tome. Samo trebas prepoznati koja imeplementacija, kad i za kaj ti treba.

Ostatak

Ono kaj se ko java korisnik moras nauciti, je koirisiti java dokumentaciju.

Otvori ovu poveznicu: http://docs.oracle.com/javase/7/docs/ap ... ,%20int%29

Ovdje pise sve o arraycopy. Sto prima, sto radi. Ukratko: kopira sadrzaj iz jednog niza u drugi, od zadane lokacije na zadanu lokaciju za odredjen broj znakova.

Ono detaljno prouci sam jer moras znat koristiti ovu dokumentaicju ako zrelis programirati u javi, jer uostalom moras i sam pisati tocno takvu dokumentaciju za svoj kod!
stefan je napisao/la:tu mač gemišta
To understand recursion, you must first understand recursion.
Odgovori