Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    115

    indexOf di un Vector

    salve a tutti

    ho un oggetto Vector nel quale inserisco degli oggetti "Forum" (da me creati) tramite il codice:

    codice:
    Vector v = new Vector();
    Forum f = new Forum(name);
    v.add(f);
    e l'oggetto viene inserito correttamente dato che una successiva v.size() mi restituisce la quantità attesa...

    il mio problema è la ricerca dell'indice di un elemento nel Vector...
    il codice:

    codice:
    Forum f = new Forum(name);
    int i = v.indexOf(f);
    mi restituisce -1 (quindi non trova la corrispondenza...)

    come posso risolvere il problema? :master:

    grazie!

  2. #2
    Hai provato a scorrere il vettore con iterator?

  3. #3
    e se il vettore lo dichiari cosi?
    codice:
    Vector<Forum> v=new Vector<Forum>();
    Forum f = new Forum(name);
    v.add(f);
    int i = v.indexOf(f);
    cosi dovrebbe funzionare... naturalmente questo preclude che tu debba usare le librerie java5
    fammi sapere..
    ciao
    stex1984

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    56
    Il metodo indexOf(Object o) di List usa il metodo equals() dell'oggetto cercato per determinare se quelli nella lista sono uguali ad esso.
    Dunque devi ridefinire opportunamente nella tua classe Forum il metodo equals(). Se non lo fai, viene usata l'implementazione di equals() ereditata da Object, che considera uguali due oggetti solo se sono lo stesso oggetto.
    Nel tuo codice definisci un nuovo oggetto (con new): l'equals() ereditato da Object lo rende diverso da tutti gli altri, anche se ha tutte le variabili d'istanza con uguali valori.

    Ad esempio, se nella classe Forum c'è la sola variabile d'istanza name di tipo String (oppure vuoi considerare due oggetti di tipo Forum come uguali solo in base all'uguaglianza di name), puoi fare:
    codice:
    public boolean equals(Object o) {
         if (!(o instanceOf Forum)) return false;
         Forum forum2 = (Forum) o;
         return name.equals(forum2.name);
    }
    In questo modo un oggetto di tipo Forum è considerato uguale ad un altro oggetto secondo il metodo equals() (la cosiddetta object equality) se l'altro oggetto è anch'esso di tipo Forum e se le variabili name dei due oggetti sono uguali.

    Quando ridefinisci equals(), è buona norma ridefinire anche hashCode(), poichè la semantica di hashCode() prevede che due oggetti uguali secondo equals() abbiano lo stesso hashCode(). Se non lo fai ti funzioneranno male le strutture basate su hash contenenti questi oggetti (es. HashTable, HashMap).

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.