Vector
Iz E-študij, proste zakladnice študentskega znanja
- Članek govori o vektorjih (class Vector) v Javi.
Definira zbirko elementov tipa Object, ki se obnaša podobno kot tabela.
Definiran v paketu java.util...
Spremenljivka tipa Vector vsebuje naslov lokacije v pomnilniku.
Vsebina |
Primerjava s tabelo
Razlike v primerjavi s tabelo:
- velikost vektorja se po potrebi avtomatsko povečuje
- vektor lahko hrani objekte različnih tipov
Kreiranje vektorjev
Za kreiranje objektov obstajajo 4 konstruktorji:
- Vector v=new Vector();
- Vector v=new Vector(int);
- Vector v=new Vector(int, int);
- Vector v=new Vector(Collection)
- naredi vektor na podlagi neke zbirke (Collection je vmesnik)
Kapaciteta in velikost vektorja
- capacity
- število objektov, ki jih lahko spravimo v vektor
- size
- dejansko število shranjenih objektov
- pozicije v vektorju
- od 0 do size-1
Metode
V razredu Vector obstaja več metod:
- int capacity();
- preverimo kakšna je kapaciteta
- int size();
- preverimo kakšna je trenutna velikost
- ensureCapacity(int);
- metoda poveča na neko določeno kapaciteto
- če je kapaciteta manjša od int se poveča
- če je večja ostane enaka
- setSize(int);
- metoda nastavi velikost zapolnjenega dela tabele
- trimToSize();
- metoda nastavi velikost vektorja na size() zato, da ne zaseda neporabljenega prostora
Shranjevanje objektov
Shranjevanje objektov v vektor:
- boolean add(Object);
- Object se tvori v pomnilniku, na prvo prosto pozicijo v vektorju pa se doda kazalec nanj
- add(int, Object);
- z int specificiramo točno pozicijo na katerega bomo vrinili kazalec na Object (ostali se premaknejo naprej)
- če je int večji od števila elementov, metoda deluje enako kot brez int (Object se doda na konec)
- addElement(Object);
- enako kot add(Object);
- Object set(int,Object);
- ustvari nov Object in na mesto int prepiše kazalec nanj (povozi prejšnjo vsebino)
- vrne Object, ki smo ga ustvarili
- setElementAt(Object, int);
- podobno kot set, z zamenjanima parametroma in brez vračanja Object
- boolean addAll(Collection);
- doda vse elemente iz Collection
- boolean addAll(int, Collection);
- doda vse elemente iz Collection na mesto int
Branje podatkov
Branje podatkov iz vektorja:
- Object get(int);
- vrne Object na poziciji int
- Object elementAt(int);
- enako kot get
- Object firstElement();
- vrne prvi element
- Object lastElement();
- vrne zadnji element
Pri branju podatkov je vedno potrebna konverzija tipa.
Primer branja, če vektor hrani objekte tipa Delavec:
Delavec d=(Delavec) v.get(4); ... Delavec d=(Delavec) v.firstElement(); Primer obdelave vseh elementov vektorja objektov tipa Delavec: Delavec d; for (int poz=0; poz< v.size(); ++poz) { d=(Delavec) v.get(poz); // nadaljna obdelava objekta d {
Prepis elementov iz vektorja v tabelo
Ker uporaba vektorja zahteva dodatno režijo, je to včasih smiselno.
Uporabimo metodi:
- Object[] toArray();
- vrne nam iz nekega vektorja tabelo objektov
- Object[] toArray(Object[]); // pozor – eksplicitna pretvorba tipa
- že obstoječo tabelo napolni z elementi iz vektorja
- tabela mora biti ustrezno deklarirana
Primer
Delavec[] td = new Delavec[v.size()]; td = Delavec[] v.toArray(td);
Odstranjevanje elementov iz vektorja
Pri odstranjevanju se kapaciteta ne zmanjšuje, zmanjšuje se samo velikost.
- Object remove(int);
- odstrani element na poziciji int, ostali za njim se premaknejo nazaj
- vrača brisani element
- boolean remove(Object);
- išče element ki je po vrednosti enak Object
- če ga najde odstrani prvega in vrne true
- če ga ne najde vrne false
- removeElementAt(int);
- enako kot remove, le da ne vrne naslova
- clear();
- popolnoma izprazni vektor, size postavi na 0
- boolean removeAll(Collection);
- odstrani vse objekte, ki so enaki objektom v Collection
Iskanje elementov
Iskanje elementov v vektorju:
- int indexOf(Object);
- vrne mesto prve pojavitve objekta
- int indexOf(Object, int);
- vrne mesto prve pojavitve objekta od int naprej
- int lastIndexOf(Object);
- vrne mesto zadnje pojavitve objekta
- int lastIndexOf(Object, int);
- vrne mesto zadnje pojavitve objekta od int naprej
Primer: vsa nastopanja objekta d v vektorju:
... int poz=0; while (poz<v.size() && poz>=0) { poz = v.indexOf(d,poz); if (poz != -1) { // obdelava objekta na poziciji poz ++poz; } }
Iterator
V vseh razredih, ki implementirajo vmesnik Collection, obstaja objekt Iterator, ki omogoča sprehajanje po elementih zbirke.
Razred Vector implementira vmesnik Collection.
Iterator ima konstruktor in 3 metode:
- Iterator();
- vrne nov element - tvori iterator
- Object next();
- vrne naslednji objekt
- boolean hasNext();
- vrne true če naslednji element obstaja
- remove();
- odstrani objekt ki smo ga dobili pri zadnjem klicu next();
Primer: Obhod s pomočjo iteratorja:
Delavec d; Iterator it=v.iterator(); while(it.hasNext()) { d=(Delavec)it.next(); //se naprej stavki za obdelavo tega elementa }
Algoritem v javi
import java.util.*; public class Vektor { public static void main(String[] args) { Vector osebe = new Vector(10); String ime; //polnjenje vektorja for ( ; ; ) { System.out.print("Vnesi ime: "); ime = BranjePodatkov.preberiString(); if (ime.length() == 0) break; osebe.add(ime); System.out.println("Kapaciteta: "+osebe.capacity() +" Velikost: "+ osebe.size()); } System.out.println(); // izpis vektorja for (int poz=0; poz < osebe.size(); poz++) System.out.println(osebe.get(poz)); System.out.println(); // izpis vektorja s pomocjo iteratorja Iterator it = osebe.iterator(); while (it.hasNext()) System.out.println((String) it.next()); System.out.println(); // iskanje for ( ; ; ) { System.out.print("Vpisi ime za iskanje: "); ime = BranjePodatkov.preberiString(); if (ime.length() == 0) break; int poz = osebe.indexOf(ime); if (poz == -1) System.out.println(ime+ " ni v vektorju"); else System.out.println(ime+ " se nahaja na poziciji "+poz); System.out.println(); } // odstranitev vseh razen prvih treh int v = osebe.size(); for (int poz = v-1; poz > 2; poz--) { osebe.remove(poz); System.out.println("Kapaciteta: "+osebe.capacity() +" Velikost: "+ osebe.size()); } System.out.println(); // izpis vektorja s pomocjo iteratorja it = osebe.iterator(); while (it.hasNext()) System.out.println((String) it.next()); System.out.println(); // odstranitev vseh na enkrat osebe.clear(); System.out.println("Kapaciteta: "+osebe.capacity() +" Velikost: "+ osebe.size()); // izpis vektorja s pomocjo iteratorja it = osebe.iterator(); while (it.hasNext()) System.out.println((String) it.next()); System.out.println(); } }