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
Kommentar veröffentlichen