Vector

Iz E-študij, proste zakladnice študentskega znanja

Skoči na: navigacija, iskanje
Č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();
 
  }
}
Vzpostavljeno iz »http://www.e-studij.si/Vector«
Osebna orodja
Imenski prostori
Različice
Dejanja
navigacija

Tiskanje/izvoz
orodja