Wie kann man Listen und Arrays sortieren


Wir haben in unserem letzten Thema die Konstruktoren mit einem Beispiel näher kennengelernt. Heute werden wir lernen wie man Listen und Arrays sortieren kann. Was verstehen wir unter sortieren? Wenn wir Zahlen haben, sortieren wir diese vom kleinste bis zum größten. Sobald wir aber Buchstaben oder Zeichenketten haben welches in der Literatur auch als Wörter benannt werden, werden diese nach der Alphabetischen Reihenfolge sortiert.

Möchte man also irgendeine Menge an Elementen sortieren, so müssen wir zunächst definieren, was die Kriterien zur Sortierung der Elementen sind. Bei Zahlen und Buchstaben sowie bei den Wörter ist es ja ganz einfach. Aber was wenn wir etwas nicht einfaches sortieren müssen.

Stellt euch einfach vor ihr habt ein Motorradshop in dem ihr eurer Maschinen der Reihenfolge nach sortieren wollt.

Die Lösung besteht darin, die Sortierkriterien mit einer selbst festgelegtem Eigenschaft zu unternehmen. In unserem Fall, also in der Programmiersprache Java, kann dies durch das Interface Comparable geschehen. Diese muss von der Klasse der zu sortierten Elemente implementiert werden. Seine Methode public int compareTo(Objekt o) übernimmt dann die Definition der Vergleichskriterien. Dabei werden die Eigenschaften in einer entsprechenden Instanzvariablen gespeichert.

In der Methode CompareTo(Objekt m) wird in diesem Fall der Hersteller des aktuellen Moped-Objektes mit einem zweiten Moped-Objekt vergleichen. Ist das Aktuelle Objekt das übergeordnete, so wird ein positiver Wert zurück gegeben, ist das als Parameter übergebene Objekt das übergeordnete, so wird ein negativer Wert zurück gegeben. Falls sich aber die Vergleichsdaten identisch sind, wird hier die 0 ausgegeben. Hierbei greift die Methode auf die Gleichnamige Methode der Klasse String zurück, die diese durch die Implementierung vom Comparable ebenfalls enthält.

package java2enterprise;

import java.util.Arrays;

/**
* @author Muhammet Esmer
* @company Java2Enterprise
* @Version 1.0
* @Date 25.November2017
*/
public class ObjectVergleich {
      public static void main(String[] args) {

   Moped m1 = new Moped("BMW", "R1100S", 98);
   System.out.println("m1: " + m1.getHersteller());
   Moped m2 = new Moped("AJS", "7R", 45);
   System.out.println("m2: " + m1.getHersteller());
      Moped m3 = new Moped("Moto Guzzi", "V8", 72);
   System.out.println("m3: " + m1.getHersteller());
   Moped m4 = new Moped("Kavasaki", "Ninja NSJ", 99);
   System.out.println("m4: " + m1.getHersteller());
   Moped[] moped = { m1, m2, m3, m4 };
   Arrays.sort(moped);
         for (int i = 0; i<moped.length; i++) {
       System.out.println(moped[i].getHersteller());
     }
   }
}

class Moped implements Comparable<Object> {
    String hersteller;
        String typ;
        int ps;
        public Moped(String hersteller, String typ, int ps) {
             this.hersteller = hersteller;
             this.typ = typ;
             this.ps = ps;
    }
        public int compareTo(Object m) {
        if(((Moped) m).getHersteller() == null && this.getHersteller() == null) {
           return 0;
    }
        else if(this.getHersteller() == null) {
           return 1;
    }
        else if(((Moped) m).getHersteller() == null) {
           return -1;
    }
        return this.getHersteller().compareTo(((Moped) m).getHersteller());
   }
     public String getHersteller() {
          return hersteller;
  }
     public String getTyp() {
          return typ;
  }
     public int getPS() {
          return ps;
  }
}


Ausgabe des Programms:

m1: BMW
m2: BMW
m3: BMW
m4: BMW
AJS
BMW
Kavasaki
Moto Guzzi



Sollen jedoch die Leistungen der Motorräder aufsteigend verglichen werden, so muss nur die Differenz beider PS-Werte gebildet werden. Dies geht wie folgt:

public int compareTo(Object m) {
    if (((Moped) m).getPS() == 0 && this.getPS() == 0) {
       return 0;
    }
    else if (this.getPS() == 0) {
       return -1;
    }
    else if (((Moped) m).getPS() == 0) {
       return 1;
    }
    return this.getPS() - ((Moped) m).getPS();
    }


Nach der Bildung der Objekte werden diese in einem Array abgelegt, das dann die übliche Weise mit der statischen Methode Arrays.sort() sortiert werden kann. Hierbei greift der Sortiermechanismus auf die in compareTo() selbst definierten Kriterien zurück.


Die Statische Methode Arrays.sort():

Die statische Methode Arrays.sort() ist einfach zu erklären. Falls wir nur zahlen oder nach der Alphabetischen Reihenfolge sortieren möchten, können wir nur die Arrays.sort() Methode verwenden und brauchen keinen separaten selbst fertiggestellten Quellcode. Um gebrauch von der Methode zu machen, müssen wir als erstes das Werkzeug java.util.Arrays; importieren. Dies erreichen wir mit dem Befehl ganz oben unser Codes >> import java.util.Arrays;
Die Methode sort(Onject[] a) ist statisch und muss daher mit dem Klassennamen (ohne Objektbildung) aufgerufen werden. Sie besitzt keinen Rückgabewert, sondern sortiert das als Parameter übergebene Array lediglich.
Hier ein Beispiel:

package java2enterprise;
import java.util.Arrays;
/**
* @author Muhammet Esmer
* @company Java2Enterprise
* @Version 1.0
* @Date 25.November2017
*/
public class ArraySortierenKlasse {
    public static void main(String[] args) {
    String[] s = new String[13];
    s[0] = "Paul";
    s[1] = "Willi";
    s[2] = "Anette";
    s[3] = "Karl";
    s[4] = "Wolfgang";
    s[5] = "Petra";
    s[6] = "Robert";
    s[7] = "Niko";
    s[8] = "Sandra";
    s[9] = "Anika";
    s[10] = "Emanuel";
    s[11] = "Martha";
    s[12] = "Jonas";
    Arrays.sort(s);
    for (int n = 0 ; n < s.length ; n++) {
       System.out.println("Das "+n+"-te Person ist: "+s[n]);
    }
    String[] k = new String[10];
    k[0] = "1";
    k[1] = "2";
    k[2] = "3.3";
    k[3] = "4.321";
    k[4] = "9.9";
    k[5] = "4.1";
    k[6] = "3";
    k[7] = "3.2";
    k[8] = "4";
    k[9] = "7.3";
    Arrays.sort(k);
    for (int l = 0; l < k.length ; l++) {
       System.out.println("Die "+l+"-te Zahl ist die: "+k[l]);
    }
  }
}

Die Methode Arrays.sort() ist überladen und kann unterschiedliche Parameter, darunter auch die Primitiven Datentypen übernehmen.

Kommentare

Beliebte Posts aus diesem Blog

How can I transform a .jar file to a .bat file?

Ein Kleines Spiel mit Altersabfrage

Raspberry Pi als echten Web- und Mailserver einsetzen (German)