Link zu www.kneller-gifs.de

Datenstruktur ArrayList

Seit Java 5 gibt es die ArrayList, die gegenüber dem Array den Vorteil hat, dass sie jederzeit vergrößert oder verkleinert werden kann. Desweiteren benötigt die ArrayList als normales Java-Objekt keine besondere Array-Syntax.

ArrayList-Beispiele mit einer Auto- und einer Testklasse
  public class Auto {
    String farbe="";
    int kW=0;
    Auto(String farbe, int kW) {
      this.farbe=farbe;
      this.kW=kW;
    }
    public void showAuto() {
      System.out.println("Farbe: " + farbe + ", Leistung: " + kW);
    }
  }

  import java.util.ArrayList; // Einbinden der ArrayList aus der java-api
  public class Test {
    public static void main(String[] args) {
      ArrayList<Auto> autoListe = new ArrayList<Auto>(); // Liste nur für Auto-Objekte
      Auto a1 = new Auto("rot", 55); // Auto-Objekt erzeugen
      Auto a2 = new Auto("schwarz", 75);
      Auto a3 = new Auto("gruen", 50);
      autoListe.add(a1); // Auto-Objekt in autoListe
      autoListe.add(a2);
      autoListe.add(a3);
      System.out.println(autoListe.size()); // 3 Objekte enthalten
      System.out.println(autoListe.indexOf(a1)); // Objekt a1 liegt an Position 0
      System.out.println(autoListe.contains(a3)); // true, weil Objekt enthalten
      autoListe.remove(a3);
      System.out.println(autoListe.contains(a3)); // false, weil Objekt gelöscht
      System.out.println(autoListe.get(0).farbe); // farbe des Objekts a1 über index (rot)
      System.out.println(autoListe.get(autoListe.indexOf(a1)).farbe); // rot (Zugriff über Objektname)
      for (Auto aktuellesAuto : autoListe) { // alle Objekte aus der Liste anzeigen
        aktuellesAuto.showAuto(); // Farbe: rot, Leistung: 55
				  // Farbe: schwarz, Leistung: 75
      }
    }
  }

Sortieren der ArrayList "autoListe" nach Kilowatt
Zum Sortieren der ArrayList bietet sich die Klasse java.util.Collections und dort die Methode "sort" an. Bei der Sortierung von eigenen Objekten muß die sort-Methode aber wissen, nach welchem Kriterium sortiert werden soll. Deshalb muss die zu sortierende Klasse das Interface Comparable implementieren das wiederum das Überschreiben der Methode "compareTo(T o)" erzwingt (also Methode anlegen und mit Code ergänzen).
  public class Auto implements Comparable<Auto>{
				// Interface einbauen, das die Implementierung von compareTo() erfordert
    String farbe="";
    int kW=0;
    Auto(String farbe, int kW) {
      this.farbe=farbe;
      this.kW=kW;
    }
    public void showAuto() {
      System.out.println("Farbe: " + farbe + ", Leistung: " + kW);
    }
    @Override
    public int compareTo(Auto o) {
      return ((Integer)kW).compareTo((Integer)o.kW);
      // return ((String)farbe).compareTo((String)o.farbe); // alternativ nach farbe sortieren
    }
  }

  import java.util.ArrayList;
  import java.util.Collections; // Collections importieren, damit u.a. "sort" genutzt werden kann
  public class Test {
    public static void main(String[] args) {
      ArrayList<Auto> autoListe = new ArrayList<Auto>();
      Auto a1 = new Auto("rot", 55);
      Auto a2 = new Auto("schwarz", 75);
      Auto a3 = new Auto("gruen", 50);
      autoListe.add(a1);
      autoListe.add(a2);
      autoListe.add(a3);
      Collections.sort(autoListe); // autoListe aufsteigend sortieren
      for (Auto aktuellesAuto : autoListe) {
        aktuellesAuto.showAuto(); // Farbe: gruen, Leistung: 50
                                  // Farbe: rot, Leistung: 55
                                  // Farbe: schwarz, Leistung: 75
      }
      Collections.reverse(autoListe); // andersrum sortieren (75,55,50)
      for (Auto aktuellesAuto : autoListe) {
        aktuellesAuto.showAuto();
      }
    }
  }