Ist natürlich eine sehr dürftige Beschreibung des Problems!! Meinst du mit mehrdimensional wirklich n Dimensionen, oder meinst du zweidimensional - sprich eine Tabelle. 1. Dimension = Zeilen, 2. Dimension = Spalten … und du möchtest die Zeilen nach einer bestimmten Spalte sortiert haben???
Für den Fall kannst du weiter lesen.
Für diese Aufgabe gibt es in Java schon Methoden, die man nutzen kann. Allerdings muss man das Design ein wenig ändern. Für eine Zeile würde man dann eine eigene Klasse erstellen, die die 2. Dimension kapselt.
public class Row {
Object[] theRow=new Object[4 /*spaltenzahl*/];
…
Dann kann man sich noch Zugriffsmethoden definieren. Z.B:
public Object getColumn( int i ) { return theRow[i]; }
public void setColumn( int i, Object o ) { theRow[i]=o; }
public void setRow( Sring spalte1, Int spalte2, Double spalte3, String spalte4)
{ theRow[0]=spalte1; theRow[1]=spalte2;
theRow[2]=spalte3; theRow[3]=spalte4; }
…
Die Tabelle sieht dann z.B. so aus:
Row[] theTable=new Row[50 /*Anzahl Zeilen*/];
Anschließend braucht man einen Comparator, der für den in Java vorhandenen Sortieralgorhytmus die Zeilen miteinander vergleichen kann. Am besten nimmt man dafür eine Innere Klasse.
public class Row {
private class RowComparator implements Comparator {
private int rowToCompare=0;
private RowComparator( int whichCol ) {
rowToCompare=whichCol;
}
…
}
public static Comparator getComparator( int whichCol ) {
return new RowComparator( whichCol );
}
…
Da der RowComparator angibt, dass er das Comparator Interface implementiert, müssen die Interface-Methoden natürlich auch definiert werden, wobei der Sortierer die compare-Methode dann mit den 2 Zeilen (also Objekten der Klasse Row) aufruft, die zu vergleichen sind:
public boolean equals( Object o ) {
…
}
public long compare( Object o1, Object o2 ) {
Row r1=(Row)o1, r2=(Row)o2;
switch( rowToCompare ) {
case 0 :
case 3 :
return ((String)r1.getColumn( rowToCompare )).compareTo( (String)r2.getColumn( rowToCompare );
case 1 :
return ((Int)r1.getColumn( rowToCompare )).compareTo( (Int)r2.getColumn( rowToCompare );
case 2 :
return ((Double)r1.getColumn( rowToCompare )).compareTo( (Double)r2.getColumn( rowToCompare );
}
}
Und schon kannst du die Zeilen nach einer beliebigen Spalte sortieren.
…
// befüllen der Tabelle
…
Array.sort( theTable, Row.getComparator( 2 ) );
Hoffe es hilft schon mal weiter. Habe das ganze nicht getestet und es liegt im Bereich des Möglichen, dass es so nicht auf Anhieb funktioniert, aber das Prinzip sollte klar geworden sein.
Gruß
Andreas