Pitanje oko kolekicja

Pitanje oko kolekicja

offline
  • Pridružio: 29 Maj 2014
  • Poruke: 54

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?
ovaj deo mi je konfuzan:int num = duzina - index - 1; if (num > 0) { System.arraycopy(lista, index + 1, lista, index, num); } lista[--duzina] = null; } 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[i].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[i] = 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]; } }



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14809
  • Gde živiš: Niš

Blue Master ::Nije mi jasan ovaj deo:private E[] lista = (E[]) new Object[duzina];jel mora E lista?jel moze mozda Arrey?"E lista" ide zbog toga što je to šablonska (generička, templejtska, kako god) klasa. Dakle, tip E dobijaš kao parametar šablona. "lista" je identifikator atributa. U principu, može i sa Array, ali je apsolutno nepotrebno upotrebljavati bibliotečku klasu kada modeluješ najobičniji niz.

Što se tiče metoda System.arraycopy(...), evo opisa:
Citat:arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
Copies an array from the specified source array, beginning at the specified position, to the specified position of the destination array.

Što se poslednje stavke tiče, dužina predstavlja trenutni broj elemenata kolekcije, a indeks je indeks elementa koji želiš da obrišeš. num je broj elemenata od elementa koji brišeš do kraja kolekcije (podseti se kako se briše element iz niza). Ako imaš 5 elementa u kolekciji, npr. {1, 2, 3, 4, 5}, i treba da obrišeš element sa indeksom 2 (to je element 3), num je u tom slučaju 5 - 2 - 1 = 2. Šta to znači? To znači da dva elementa kolekcije (4 i 5) treba da pomeriš za po jedno mesto u levo. Nakon toga dobijaš ovo: {1, 2, 4, 5}



offline
  • Pridružio: 29 Maj 2014
  • Poruke: 54

Napisano: 23 Jun 2014 16:48

Hvala ti puno,dosta si mi pomogao. Smile

Dopuna: 23 Jun 2014 20:02

Samo jos da te pitam lista = Arrays.copyOf(lista, ++niz);
lista[niz - 1] = obj;kad ukucam ovako nece da mi radi program:
for(int i =0;i<lista.length;i++){
lista[i]=obj

}

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14809
  • Gde živiš: Niš

Prođi dibagerom kroz program pa vidi gde zeza.

Ko je trenutno na forumu
 

Ukupno su 954 korisnika na forumu :: 45 registrovanih, 8 sakrivenih i 901 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: airsuba, ajo baba, Atomski čoban, babaroga, bigfoot, bojank, Boris BM, Brana01, CikaKURE, DPera, draganl, Excalibur13, FileFinder, FOX, Georgius, herrDule, Jahorina, Kibice, Kruger, laurusri, Leonov, LUDI, maiden6657, milos.cbr, milutin134, MiroslavD, Mixelotti, naki011, nemkea71, nenad81, Panter, pein, procesor, Romibrat, Sirius, slonic_tonic, Srky Boy, stegonosa, tmanda323, Toper, Trpe Grozni, vathra, W123, šumar bk2, 125