ArrayList sortieren - mal wieder.

  • Themenstarter Themenstarter Gast
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Für die meisten sicherlich kalter Kaffee, für mich (im Moment noch) ein Problem.
Ich habe eine ArrayList angelegt

Code:
public java.util.List<String[]> wordList = new ArrayList<String[]>;

die, wie man sieht, Arrays vom Typ String enthalten soll. Bei den Arrays handelt es sich immer um ein Wort und eine Beschreibung, die ich aus einer Datei einlese. Das klappt so weit.
Ich würde die Liste jetzt gern nach dem ersten Element der enthaltenen Arrays sortieren, also praktisch
Code:
wordList.get(x)[0]
.

Wie mach' ich das?

Einfach nur mit sort geht es offensichtlich nicht, dann wird beim Kompilieren die Methode sort(java.util.List<java.lang.String[]>) nicht gefunden. Entweder ich habe hier was richtig falsch gemacht oder ich brauche einen Comparator dazu. Habe ich zwar schon probiert, aber den Unsinn poste ich hier lieber nicht...

Danke im Voraus für eure Hilfe!
 
"sort" und "Comparator" ist schon richtig, der Comparator muss ein "Comparator<String[]>" sein, und "Collections.sort" kann man dann mit der Liste und dem Comparator aufrufen.

[Sorry, Vorlesung geht weiter...]
 
[Vorlesung fertig]

Wollte noch etwas Code anhaengen, ein Comparator koennte so aussehen:
Code:
Comparator<String[]> c = new Comparator<String[]>{
  public int compare( String[] a, String[] b ){
    int length = Math.min( a.length, b.length );
    for( int i = 0; i < length; i++ ){
      int comparison = a[i].compareTo( b[i] );
      if( comparison != 0 )
        return comparison;
    }

     if( a.length < b.length )
      return -1;
    if( a.length > b.length )
      return 1;
    return 0;
  }
}
 
Danke, das hat geholfen. Hatte gedacht, dass es etwas einfacher gehen würde, muss mir das wohl noch mal ansehen...
 
Wie verhält es sich denn, wenn die ArrayList vom Typ StringBuffer ist?? Das Problem habe ich nämlich gerade... Für den Typ String ist das klar, aber für StringBuffer klappt das nicht so...
 
Statt
public int compare( String[] a, String[] b ){
steht da dann eben
public int compare( StringBuffer a, StringBuffer b ){
und die ist im einfachsten Fall so implementiert
Code:
public int compare( StringBuffer a, StringBuffer b ){ 
    return a.toString().compare(b.toString());
}
Ist aber relativ ineffizient - wenn's um VIELE Daten oder sehr lange Strings geht, könnte man das besser machen...
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben