Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [JAVA] Comparator<E>

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    106

    [JAVA] Comparator<E>

    Ragazzi ho un problema. Sto facendo una classe che misura il tempo per aggiungere dati, toglierli, cercarli, ecc. per alcune strutture dati; in questo caso sto analizzando la PriorityQueue.
    Se passo alla struttura numeri interi , il struttura riesce a tenere ordinati in ordine crescente tutti i valori...ma ovviamente passandogli stringhe non ottengo lo stesso risultato!!.
    Visto che la mia struttura deve poter accettare qualunque cosa, ho PROVATO (senza risultato) a ridefinire il metodo compare dell'interfaccia Comparator<E> solo che non riesco a implementarlo!!
    Potete aiutarmi??
    Come faccio a fare il confronto??
    Vi posto il codice (la classe che estendo DataStruct e semplicemente una superclasse per tutte le strutture che andrò ad implementare)
    codice:
    import java.util.PriorityQueue;
    
    public class StrPriorityQueue<E> extends DataStruct<E> implements Comparator<E>{
    	
    	PriorityQueue<E> struct;
    	
    	public StrPriorityQueue(){
    		struct = new PriorityQueue<E>();
    	}
    	
    	 public boolean add(E e){ 
    		 double start = System.nanoTime();  
    	  	 struct.add(e); 							//ADD//
    	  	 double end = System.nanoTime();		
    	  	 tempAdd = tempAdd + (end - start);
    	  	 return true; 
    	 }  
    	     
    
    	 /*public E getValue(){
    		 return valore;
    	 }*/
    
    	 /*public int compare(E alfa, E beta) {
    		if(alfa.getValue() < beta.getValue())
    			return -1;
                     .......
                     .......
    	}*/
    }

  2. #2
    Non ho capito perchè fai implementare l'interfaccia Comparator ad una struttura destinata a contenere dati. Dovresti spiegare questa scelta.

    In genere, Comparator va definito per i dati che devono essere ordinati.

    Quindi penso che dovresti definire una cosa tipo:
    codice:
    public class StrPriorityQueue<E> extends DataStruct<E>{
    	
    	private PriorityQueue<E> struct;
            private Comparator<E> c;	
    
    	public StrPriorityQueue(Comparator<E> c){
    		this.struct = new PriorityQueue<E>();
                    this.c = c;
    	}
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    106
    in poche parole vorrei che la mia struttura tenesse ordinati i miei elementi ogni volta che aggiungo un nuovo valore....con gli interi la priorityqueue riesce a tenerli già in ordine crescente, mentre aggiungendo stringe l'ordine crescente viene perso....l'unico modo (credo) è implementare il compare di comparator...ripeto, penso debba fare una roba del genere

  4. #4
    Originariamente inviato da albymotard
    in poche parole vorrei che la mia struttura tenesse ordinati i miei elementi ogni volta che aggiungo un nuovo valore....con gli interi la priorityqueue riesce a tenerli già in ordine crescente, mentre aggiungendo stringe l'ordine crescente viene perso....l'unico modo (credo) è implementare il compare di comparator...ripeto, penso debba fare una roba del genere
    No, non c'è bisogno in quanto le Stringhe sono Comparable.

    La documentazione dice:
    This queue orders elements according to an order specified at construction time, which is specified either according to their natural order (see Comparable), or according to a Comparator, depending on which constructor is used.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    106
    scusami ma non ho capito...nel senso che io ho provato a inserire stringe senza implementare nessuna interfaccia e ho visto che non riesce a tenere l'ordine crescente delle stringhe...puoi spigarmi cosa devo fare

  6. #6
    Originariamente inviato da albymotard
    scusami ma non ho capito...nel senso che io ho provato a inserire stringe senza implementare nessuna interfaccia e ho visto che non riesce a tenere l'ordine crescente delle stringhe...puoi spigarmi cosa devo fare
    Es.

    codice:
            PriorityQueue<String> q = new PriorityQueue<String>();
            q.add("andrea");
            q.add("zora");
            q.add("damiano");
            q.add("baco");
            q.add("laura");
            q.add("giovanni");
    
           while( q.peek() != null )
           	System.out.println( q.poll() );
    Te le stampa secondo l'ordine lessicografico.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    106
    Ho riprovato a stampare le varie stringhe con il ciclo while (come mi hai suggerito) ed effettivamente la stampa mi da un risultato perfetto (in ordine crescente).
    Non capisco però come non mai non riuscivo a far stampare con l'ordine giusto con il mio procedimento...io passato la mia struttura priorityqueue in un array e poi la stampavo con un ciclo for-each(risultato sbagliato). Facevo tutto ciò perchè ho fatto un il metodo che stampava il contenuto delle strutture è comune a tutte (purtroppo con la priorityqueue non è possibile utilizzare il for-each).
    Puoi consigliarmi qualcosa?
    In poche parole devo poter stampare con un unico metodo (che sarà implementato nella superclasse) tutti i valori contenute nelle mie strutture (ho implementato 8 sottoclassi con 8 strutture java tipo arraylist, priorityqueue, treemap).

  8. #8
    Originariamente inviato da albymotard
    Non capisco però come non mai non riuscivo a far stampare con l'ordine giusto con il mio procedimento...io passato la mia struttura priorityqueue in un array e poi la stampavo con un ciclo for-each(risultato sbagliato).
    In questo modo non otterrai mai una vista ordinata degli elementi. Lo dice la documentazione.

    Originariamente inviato da albymotard
    Puoi consigliarmi qualcosa?
    codice:
    Arrays.sort( q.toArray() )

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    106
    Perfetto...grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.