Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339

    Dubbio implementazione metodo equals

    Salve a tutti ragazzi.
    Allora:

    Io ho la seguente interfaccia :

    codice:
    
    public interface CollezioneOrdinata<E extends Comparable<? super E>> extends Iterable<E> {
    	
    	int size();
    	void aggiungi(E elem);
    	boolean rimuovi(E elem);
    	boolean rimuoviIntervallo(E min, E max);
    	boolean rimuovi(CollezioneOrdinata<E> c);
    	boolean rimuoviIntervallo(CollezioneOrdinata<E> c, E min, E max);
    	void aggiungi(CollezioneOrdinata<E> c);
    	void aggiungiIntervallo(CollezioneOrdinata<E> l, E min, E max);
    	CollezioneOrdinata<E> intervallo(E min, E max);
    
    }
    Ho creato una classe CollezioneOrdAstratta che implementa l'interfaccia.
    Ho concretizzato il metodo rimuovi(E elem) che rimuove dalla collezione l'elemento ricevuto come parametro e nel caso non sia presente restituisce false.

    codice:
    @Override
    	public boolean rimuovi(E elem){
    		int count=0;
    		Iterator<E> it = this.iterator();
    		while(it.hasNext()){
    			E elm = it.next();
    			if(!elm.equals(elem)) continue;
    			it.remove();
    			count++;
    		}
    		return count>0;
    		
    	}//RIMUOVI
    Tralasciando gli altri metodi , L'esercizio mi dice di definire esplicitamente il metodo equals.
    Ora siccome ho utilizzato il metodo equals nel metodo rimuovi per confrontare i due elementi ; volevo sapere se ho scritto correttamente l'equals

    codice:
    @Override
    	public boolean equals(Object o){
    		if(o==this) return true;
    		if(o==null) return false;
    		if(!(o instanceof CollezioneOrdAstratta)) return false;
    		E elem = (E)o;
    		return this.equals(elem);
    		
    	}

  2. #2

    Re: Dubbio implementazione metodo equals

    Originariamente inviato da Markus85
    L'esercizio mi dice di definire esplicitamente il metodo equals.

    codice:
    @Override
    	public boolean equals(Object o){
    		if(o==this) return true;
    		if(o==null) return false;
    		if(!(o instanceof CollezioneOrdAstratta)) return false;
    		E elem = (E)o;
    		return this.equals(elem);
    		
    	}
    Non credo tu debba definirlo per E, in quanto sta ad indicare un tipo generico (si tratta di un parametro di tipo).
    In questo caso l'argomento o deve riferirsi ad una istanza di CollezioneOrdinata (ad esempio), quindi ti basta scorrere sequenzialmente le due liste (previa medesima lunghezza).

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Potresti essere più chiaro?

    Nel metodo rimuovi anzichè usare l'equals , posso confrontare i due parametri direttamente?

    codice:
    @Override
    	public boolean rimuovi(E elem){
    		int count=0;
    		Iterator<E> it = this.iterator();
    		while(it.hasNext()){
    			E elm = it.next();
    			if(elm!=(elem)) continue;
    			it.remove();
    			count++;
    		}
    		return count>0;
    		
    	}//RIMUOVI

    oppure devo ridefinire l'equals in modo che esso verifichi se due collezioni (in questo caso "CollezioneOrdinata") sono uguali?

  4. #4
    Originariamente inviato da Markus85
    Nel metodo rimuovi anzichè usare l'equals , posso confrontare i due parametri direttamente?
    Devi usare il metodo equals, altrimenti vai a confrontare riferimenti e non oggetti.

    Originariamente inviato da Markus85
    devo ridefinire l'equals in modo che esso verifichi se due collezioni (in questo caso "CollezioneOrdinata") sono uguali?
    Si esatto, la traccia dovrebbe riferirisi a questo (come ti ho scritto nel post precedente).

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Quindi cosi :

    codice:
    @Override
    	public boolean rimuovi(E elem){
    		int count=0;
    		Iterator<E> it = this.iterator();
    		while(it.hasNext()){
    			E elm = it.next();
    			if(!elm.equals(elem)) continue;
    			it.remove();
    			count++;
    		}
    		return count>0;
    		
    	}//RIMUOVI
    poi l'equals :

    codice:
    @Override
    	public boolean equals(Object o){
    		if(o==this) return true;
    		if(o==null) return false;
    		if(!(o instanceof CollezioneOrdinata)) return false;
    		CollezioneOrdinata co = (CollezioneOrdinata) o;
    		Iterator<E> it1 = this.iterator();
    		Iterator it2 = co.iterator();
    		while(it1.hasNext()){
    			if(!it2.hasNext()) return false;
    			E elm = it1.next();
    			Object obj = it2.next();
    			if(!elm.equals(obj)) return false;
    		}
    		if(it2.hasNext())return false;
    		return true;
    		
    		
    	}//Equals
    Giusto?

  6. #6
    Originariamente inviato da Markus85
    Giusto?
    Il remove è corretto, anche se potresti utilizzare direttamente l'underlying collection.
    Stesso discorso per equals.

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.