Ordinare in ordine alfabetico A-Z (Agenda telefonica)

di il
3 risposte

Ordinare in ordine alfabetico A-Z (Agenda telefonica)

Ciao a tutti, ho riscontrato un problema ancora, allora ho realizzato un'agenda telefonica dove inserisco i contatti e li salvo su file li apro etc. etc.
Per contenere tutte le informazioni di un contatto ho utilizzato delle Tab, delle schede, io voglio che una volta che ho premuto "Salva" il programma mi riordini tutte le schede dalla A alla Z.. Come posso fare?

(Per l'algoritmo ho utilizzato le LinkedList)

Grazie in anticipo a tutti

3 Risposte

  • Re: Ordinare in ordine alfabetico A-Z (Agenda telefonica)

    Chia995 ha scritto:


    il programma mi riordini tutte le schede dalla A alla Z.. Come posso fare?

    (Per l'algoritmo ho utilizzato le LinkedList)
    Se hai, in generale, un List che contiene oggetti di una tua classe es. Contatto, devi fare in modo che siano ordinabili usando la interfaccia Comparable o Comparator, che servono per definire un criterio di comparazione-ordinamento.
    Comparable va implementata nella classe degli oggetti (es. in Contatto) e il criterio definito è ovviamente uno solo. Comparator va implementato in classi separate, quindi ne puoi avere N di criteri.

    Poi per ordinare usi uno dei sort() di java.util.Collections.

    Ci sarebbe da dire ben di più ma ora non ho tempo, documentati sulle classi/metodi citati.
  • Re: Ordinare in ordine alfabetico A-Z (Agenda telefonica)

    Che andbin non me ne voglia, scrivo giusto per dire qualcosa in più su queste 2 interfacce

    Esiste una sostanziale differenza fra "Comparable" e "Comparator", differenza che si evince già dal nome: la prima indica la capacità di un oggetto essere comparato (una sorta di "ordinamento naturale"), mentre la seconda indica la capacità di un oggetto di comparare altri oggetti.
    Quindi, sempre in riferimento all'agenda, se la classe "Contatto" implementa l'interfaccia "Comparable" (e di conseguenza implementa il metodo "compareTo(Contact other)") allora si sta definendo il modo naturale attraverso il quale è possibile ordinarne le istanze: ad esempio possiamo ritenere naturale un ordinamento alfabetico crescente (a-z) in cui si confronta prima il nome e poi, in caso di omonimia, il cognome.

    Allo stesso tempo, però, potrebbero esserci dei casi in cui magari può farti comodo ordinare i contatti sulla base del numero di telefono (supponiamo che questa cosa abbia un'utilità ). Per questo motivo è possibile definire un'altra classe, ad esempio "ContactSortByPhoneComparator", che implementa l'interfaccia "Comparator<Contact>" e il relativo metodo "compare(Contact c1, Contact c2)", attraverso il quale è possibile effettuare un ordinamento diverso da quello "naturale" (il quale, se esiste, viene ignorato).

    Quindi per ordinare una lista di oggetti "Comparable" in modo naturale puoi usare il metodo statico
    Collections.sort(lista);
    mentre per ordinare la stessa lista tramite il "Comparator":
    Collections.sort(lista, comparator);
  • Re: Ordinare in ordine alfabetico A-Z (Agenda telefonica)

    Della ha scritto:


    Che andbin non me ne voglia, scrivo giusto per dire qualcosa in più su queste 2 interfacce

    Esiste una sostanziale differenza fra "Comparable" e "Comparator", differenza che si evince già dal nome: la prima indica la capacità di un oggetto essere comparato (una sorta di "ordinamento naturale"), mentre la seconda indica la capacità di un oggetto di comparare altri oggetti.
    Quindi, sempre in riferimento all'agenda, se la classe "Contatto" implementa l'interfaccia "Comparable" (e di conseguenza implementa il metodo "compareTo(Contact other)") allora si sta definendo il modo naturale attraverso il quale è possibile ordinarne le istanze: ad esempio possiamo ritenere naturale un ordinamento alfabetico crescente (a-z) in cui si confronta prima il nome e poi, in caso di omonimia, il cognome.

    Allo stesso tempo, però, potrebbero esserci dei casi in cui magari può farti comodo ordinare i contatti sulla base del numero di telefono (supponiamo che questa cosa abbia un'utilità ). Per questo motivo è possibile definire un'altra classe, ad esempio "ContactSortByPhoneComparator", che implementa l'interfaccia "Comparator<Contact>" e il relativo metodo "compare(Contact c1, Contact c2)", attraverso il quale è possibile effettuare un ordinamento diverso da quello "naturale" (il quale, se esiste, viene ignorato).

    Quindi per ordinare una lista di oggetti "Comparable" in modo naturale puoi usare il metodo statico
    Collections.sort(lista);
    mentre per ordinare la stessa lista tramite il "Comparator":
    Collections.sort(lista, comparator);
    Grazie mille!! Perfetto!
Devi accedere o registrarti per scrivere nel forum
3 risposte