Vektorer (klassen Vector) Sortering Föreläsning 12 Vektorer (klassen Vector) Sortering
Vector Kan ses som en dynamisk array Har metoder för att bl.a. lägga till, ta bort och returnera objekt Består internt av en array av Object Kan lagra alla typer av objekt (samtidigt) Kan inte hantera primitivatyper Finns i paketet java.util
Vector Har både en storlek och en kapacitet storlek – antal inlagda objekt kapacitet – totalt som kan läggas in Ändrar kapaciteten automatiskt Måste konvertera objekt som tas ut Är mer flexibel, men inte lika effektiv som en array
Skapa Vector Skapar ny vektor med kapacitet 10 Vector v = new Vector(); Skapar ny vektor med kapacitet 10 Fördubblas vid varje ökning (ökar exp.) Vector v = new Vector(35); Skapar ny vektor med kapacitet 35 Fördubblas vid varje ökning (ökar exp.) Vector v = new Vector(35, 5); Skapar ny vektor med kapacitet 35 Ökar med 5 element varje gång
Storlek Och Kapacitet Returnerar antalet inlagda objekt int storlek = v.size(); Returnerar antalet inlagda objekt int kapacitet = v.capacity(); Returnerar antal objekt som kan lagras v.setSize(10); Sätter storlek exakt till 10. Fyller på med null-referenser eller tar bort befintliga v.trimToSize() Sätter kapaciteten till aktuell storlek
Lägga Till Element Lägger till ett nytt objekt efter det sista v.addElement(new Person("Kalle", 33)); Lägger till ett nytt objekt efter det sista Ökar kapaciteten om det krävs v.setElementAt(new Person("Stina", 8), 6); Lägger in ett objekt på angivet index (6) Skriver ev. över det som finns sen förut v.insertElementAt(new Person("Bo", 12), 3); Skjuter in ett objekt på angivet index (3) Flyttar fram övriga objekt ett steg
Ta Bort Element Tar bort objektet på angivet index (1) v.removeElementAt(1); Tar bort objektet på angivet index (1) 0 < index > v.size() Flyttar övriga objekt v.removeAllElements(); Tar bort alla inlagda objekt (size sätts till 0) boolean tom = v.isEmpty(); Kontrollerar om vektorn innehåller några objekt eller inte (true eller false)
Hämta Ut Element Returnerar första elementet i vektorn Object first = v.firstElement(); Returnerar första elementet i vektorn Object last = v.lastElement(); Returnerar sista elementet i vektorn Object obj = v.elementAt(2); Returnerar elementet på angivet index (2) Måste konvertera till rätt typ av objekt! if (obj instanceof Person) { Person p = (Person)obj; p.print(); }
Loopa Igenom Alla Element for (int i = 0; i < v.size(); i++) { Object obj = v.elementAt(i); // Konvertera obj till rätt typ och gör något med det } Exempel 1 Enumeration e = v.elements(); while (e.hasMoreElements()) { Object obj = e.nextElement(); // Konvertera obj till rätt typ och gör något med det } Exempel 2
Sortering Ett vanligt förekommande problem Kan användas t.ex. för att: Presentera data på ett sätt så att det är lätt att söka i det för användaren Uppnå effektiv sökning Finns flera olika algoritmer Från långsamma men lätta att förstå Till snabba men svåra att förstå
Urvalssortering (Selection sort) Sortera en array med heltal Hitta minsta värdet i arrayen Byt plats med värdet på index 0 Hitta näst minsta värdet i arrayen Byt plats med värdet på index 1 Fortsätt tills hela arrayen är sorterad for (int i = 0; i < array.length – 1; i++) { int minIndex = i; // Gissar att minsta talet finns på index 0 for (int j = i + 1; j < array.length; j++) { if (array[j] < array[minIndex]; // Är övriga tal < minIndex minIndex = j; // Isf sätter vi nytt minIndex } // Dags att byta plats int tmp = array[i]; array[i] = array[minIndex]; array[minIndex] = tmp; }
Sortering med Arrays Klassen Arrays innehåller statiska metoder för att enkelt kunna: söka, sortera, jämföra och fylla arrayer Finns i paketet java.util Sorterar alla primitiva typer (ej boolean) Samt alla objekt som implementerar gränssnittet Comparable import java.util.*; int[] a = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0}; Arrays.sort(a);
Sortering Med Comparable Comparable är ett gränssnitt som anger att något är jämförbart Innehåller endast en metod: public int compareTo(Object o) Som jämför aktuellt objekt med objektet o och… Returnerar -1 om aktuellt objekt kommer före objekt o Returnerar 0 om aktuellt objekt och objekt o är lika Returnerar 1 om aktuellt objekt kommer efter objekt o Vi måste själva bestämma hur denna jämförelse ska utföras
Sortering Med Comparable Kan t.ex. implementeras i de klasser vi vill kunna sortera med Arrays Måste konvertera objekt o till rätt typ public class Vara implements Comparable { private String typ; private int pris; public Vara(String t, int p) { typ = t; pris = p; } public int compareTo(Object o) { Vara v = (Vara)o; return this.pris – v.pris; } } // i t.ex. main Vara[] varor = new Vara[3]; varor[0] = new Vara("Bil", 50000); varor[1] = new Vara("Läsk", 10); varor[2] = new Vara("Pizza", 50); Arrays.sort(varor);