Linux - Friheden til at programmere i Java: Version 0.7.20040516 - 2020-12-31 | ||
---|---|---|
forrige | Kapitel 4. Objekter | næste |
En Vector er en liste af andre objekter, nummereret efter et indeks.
Konstruktører og metoder er beskrevet i appendiks, Afsnit 4.7.4.2.
En Vector er en liste af andre objekter
Man opretter en vektor med f.eks.:
Vector v; v = new Vector();
Derefter kan man tilføje et objekt i enden af listen med addElement( objekt ), f.eks.:
v.addElement("æh");
tilføjer strengen "æh" sidst i vektoren.
Man kan sætte ind midt i listen med v.insertElementAt( objekt, int indeks ), f.eks.:
v.insertElementAt("øh",0);
indsætter "øh" på plads nummer 0, sådan at vektoren nu indeholder først "øh" og så "æh". Alle elementerne fra og med det indeks hvori man indsætter, får altså rykket deres indeks et frem.
Man henter elementerne ud igen med elementAt ( indeks ).
Med v.size() får man antallet af elementer i vektoren, i dette tilfælde 2.
Nogle af Vector-klassens metoder
Metoder
void addElement( objekt )Føjer objekt til vektoren. objekt kan være et vilkårligt objekt (men ikke en simpel type)
void insertElementAt( objekt, int indeks )Indsætter objekt i vektoren lige før plads nummer indeks
void removeElementAt( int indeks )Sletter objektet på plads nummer indeks
int size()Returnerer antallet af elementer
Object elementAt (int indeks)Returnerer en reference til objektet på plads nummer indeks. Husk at lave en typekonvertering af referencen til den rigtige klasse før resultatet lægges i en variabel (se Point-eksemplet nedenfor).
String toString ()Returnerer vektorens indhold som en streng. Dette sker ved at konvertere hver af elementerne til en streng.
Vector-klassen skal importeres med import java.util.*; før den kan bruges
Her er et lille eksempel:
import java.util.*; public class Vectortest { public static void main(String args[]) { Vector v; v = new Vector(); v.addElement("æh"); v.addElement("bæh"); v.addElement("buh"); System.out.println("v har elementerne "+v.toString()); v.insertElementAt("og",2); System.out.println("Nu har v elementerne "+v); //toString() kaldes implicit v.removeElementAt(0); System.out.println("Nu har v elementerne "+v+" og størrelsen "+v.size()); System.out.println("På plads nummer 2 er: "+v.elementAt(2)); } }
v har elementerne [æh, bæh, buh] Nu har v elementerne [æh, bæh, og, buh] Nu har v elementerne [bæh, og, buh] og størrelsen 3 På plads nummer 2 er: buh
Vi indsætter først tre (referencer til) strenge i vektoren. I hukommelsen ser det sådan ud:
Dernæst lægges "og" ind på plads nummer 2, dvs. efter "bæh" og før "buh". Til sidst fjernes "æh" på plads nummer 0.
Vector-objekter kan blive vilkårligt lange. De sørger selv for at reservere mere hukommelse, hvis det bliver nødvendigt.
I det næste eksempel lægges tre Point-objekter ind i en vektor, og vektoren gennemløbes for at finde punktet med den mindste afstand til (0,0) (origo).
Læg mærke til, hvordan man kan gennemløbe en vektor:
for (int n=0;n<pv.size();n++) { Point p; p=(Point) pv.elementAt(n); // punkt nr n hentes ud af vektoren // (typekonvertering nødvendig) //... }
Da vektorer kan indeholde objekter af alle mulige typer, er man nødt til at lave en typekonvertering af den objekt-reference, som elementAt() returnerer.
import java.awt.*; import java.util.*; public class MindsteAfstand { public static void main(String args[]) { Vector pv; // punkt-vektor Point origo, p1, p2, p3; double mindist=10000; pv=new Vector(); origo=new Point(0,0); p1=new Point(0,65); p2=new Point(50,50); p3=new Point(120,10); pv.addElement(p1); pv.addElement(p2); pv.addElement(p3); for (int n=0;n<pv.size();n++) { double dist; Point p; p=(Point) pv.elementAt(n); // punkt nr n hentes ud af vektoren // (typekonvertering nødvendig) dist = origo.distance(p); if (dist<minDist) { mindist=dist; } } System.out.println("Den mindste afstand mellem punkterne " +pv+" og (0,0) er "+minDist); } }
Den mindste afstand mellem punkterne [java.awt.Point[x=0,y=65], java.awt.Point[x=50,y=50], java.awt.Point[x=120,y=10]] og (0,0) er 65.0
Her er en lille stump programkode, der i stedet finder den mindste afstand mellem to punkter, der ligger ved siden af hinanden i vektoren:
for (int n=0;n<pv.size()-1;n++) { double dist; Point p,q; p=(Point) pv.elementAt(n); q=(Point) pv.elementAt(n+1); dist = q.distance(p); if (dist<minDist) { mindist=dist; } }
Og herunder er vist, hvordan man kan finde den mindste afstand mellem to vilkårlige punkter i vektoren:
for (int n=0;n<pv.size();n++) { for (int k=n;k<pv.size();k++) { double dist; Point p,q; p=(Point) pv.elementAt(n); q=(Point) pv.elementAt(k); dist = q.distance(p); if (dist<minDist) { mindist=dist; } } }