java.util.Collections.sort()



  • hallo, ich hab ein Problem. Ich beschäftige mich seit kurzem mit Java und hab nun ein Programm, das ein Verzeichnis aufruft und den Inhalt (sprich alle Dateien) in eine Liste (ArrayList) schreibt. Nicht das Problem. Nun muss ich aber die Listenelemente (sprich die Dateien) nach ihrer Bytegröße sortieren. Die einzelnen Elemente der Liste sind Objekte vom Typ MyFile (selber geschrieben), die den Dateinamen und die Bytegröße als Member enthalten. Die Sortierung muss durch die Sort-Methode von java.util.Collections erfolgen. Dazu muss ja einmal als Parameter die Liste und einmal ein Comparator-Objekt übergeben werden. Nun weiß ich nicht was ich der compare-Methode vom Comparator so alles sagen muss. Der Comparator muss auch als innere annonyme Klasse realisiert sein.

    Hier mal der passende Codeauszug. Die Klasse MyFile könnt ihr euch ja denken, ist ja nicht anspruchsvoll.

    //
    //	compare
    //
    Comparator comp = new Comparator()
    {
    	public int compare( Object arg0, Object arg1 )
    	{
    		return 0;
    	}
    
    	public int compare( MyFile arg0, MyFile arg1 )
    	{
    		/*	if size of arg0 > size of arg1	--> return 0  
    		 * 	if size of arg1 > size of arg0	--> return 1
    		 *	else (same)			--> return -1
    		 */
    
    		if( arg0.getSize() > arg1.getSize() )				
    			return 0;
    		else if( arg1.getSize() > arg0.getSize() )
    			return 1;
    		else
    			return -1;
    	}
    };
    
    //
    //	sort
    //
    java.util.Collections.sort( list, comp );
    


  • Es wird immer die "compare( Object, Object )"-Methode aufgerufen. Der Sotieralgorithmus weiss schliesslich nicht, dass da MyFile-Objekte verglichen werden. Entsprechend müssen ein paar Casts daher:

    public int compare( Object a, Object b ){
      MyFile ma = (MyFile)a;
      MyFile mb = (MyFile)b;
    
      if...
      else...
    }
    


  • Fett. Vielen Dank.


Anmelden zum Antworten