La cosa forse più intuitiva è questa:
Carica File
Ordina
Salva File
La complessità computazionale non è alta, anzi, è O(nlogn) che è il limite asintotico nativo degli ordinamenti (ovviamente usando Merge Sort)
Ti consiglio di realizzare una classe del tipo
codice:
public class Anagrafica implements Comparable {
// Proprietà per le quali prevedi anche getter e setter
private String nome;
private String cognome;
private int numero;
/**
* Costruttore
*/
public Anagrafica(String nome, String cognome, int numero) {
this.nome = nome;
this.cognome= cognome;
this.numero= numero;
}
/**
* Redifinizione metodo compareTo
*/
public int compareTo(Object obj) throws ClassCastException {
if(! (obj instanceof Anagrafica)) {
throw new ClassCastException();
}
Anagrafica compare = (Anagrafica) obj;
if(getNumero() < compare.getNumero()) {
return -1;
} else if(getNumero() > compare.getNumero()) {
return 1;
} else {
return 0;
}
}
}
A questo punto puoi riempire un java.util.Vector di Anagrafica, una per ogni riga ( O(n) ) durante il caricamento del file.
Con il codice seguente, inoltre, ordinerai con mergesort gli elementi del tuo vettore secondo la specifica del metodo compareTo
codice:
// Suppongo che il vettore sia già pieno
java.util.Vector anagrafiche
// Trasformo in array di oggetti
Object objs[] = anagrafiche.toArray();
// Ordino con merge sort
java.util.Arrays.sort(objs);
// Riempio il mio Vector opportunamente svuotato
anagrafiche.clear();
for(int i = 0; i < objs.length; i++) {
anagrafiche.add(i, objs[i]);
}
Adesso puoi salvare il file scorrendo il tuo Vector.
Che ne dici???
Ciao