Colgo l'occasione per fare un saluto a tutto il forum visto che questo è il mio primo post; ma veniamo al dunque.

Sono uno studente di informatica alle prime armi e al momento mi trovo ad arrancare su un argomento che credo dovrei invece padroneggiare in quanto scheletro di molti programmi: l'ordinamento.


Per ordinare array di interi o di stringhe non dovrei aver problemi in quanto ci è stata fornita una classe apposita con tutta una serie di metodi per eseguire facilmente i vari tipi di ordinamento; ma quando si è parlato di ordinare dei vector contenenti oggetti, sono cominciati i problemi.

Un vecchio topic su questo forum illustrava come utilizzare il metodo comparable.
Ad esempio: avendo un vector contenente un array di oggetti di tipo FileInfo
codice:
public class FileInfo implements Comparable {
    private String directory;

    private String nome;

    private long dimensione;

    public FileInfo(String directory, String nome, long dimensione) {
        this.directory = directory;
        this.nome = nome;
        this.dimensione = dimensione;
e volendo ordinarlo secondo directory+nome, dovevo aggiungere, al fondo della classe, il metodo compareTo
codice:
public int compareTo(Object obj) throws ClassCastException {
        FileInfo p = (FileInfo)obj;
        int confrontoDirectory = directory.compareTo(p.directory);
        if(confrontoDirectory != 0) {
            return confrontoDirectory;
        }
        return nome.compareTo(p.nome);
    }
Per poi utilizzare semplicemente nel programma principale il metodo Collections.sort(v) [dove v è il nome del vettore da ordinare].

Il problema arriva nel momento in cui vorrei dare all'utente la possibilità di scegliere in che modo ordinare il Vector in questione.
In questo caso dovrei poter scegliere tra directory, directory+nome, dimensione; sempre in un vecchio topic di questo forum mi pareva di aver visto una discussione che riguardava un simile argomento affermando che, in questo caso, sarebbe stato necessario utilizzare Comparator al posto di Comparable ma non avendo capito molto di quel thread, mi ritrovo a chiedere a voi come si potrebbe fare.


Inoltre mi chiedevo, nel caso volessi implementare un metodo per cercare un file per nome (restituendo un vettore con tutti file trovati, considerando che un file con lo stesso nome puo' essere trovato in directory differenti), se ci fosse qualche scorciatoia per eseguire una ricerca binaria (la più efficiente una volta ordinato il vettore) su di un vector di tipo FileInfo (vedi sopra).

Un grazie in anticipo a chiunque mi possa aiutare ^_^