2009-12-01 3 views
0

J'écris un programme Java qui utilise l'interface TreeMap, et j'ai un problème avec containsKey. Il retourne vrai même quand je donne à containKey quelque chose que je sais pour certain n'est pas dans le TreeMap.Java TreeMap containsKey retourne invariablement vrai?

Quelle est la cause de ceci?

Merci beaucoup d'avance.

-

Edit: Je suis en train d'écrire un programme qui compte les occurrences de mots dans un fichier texte. Les mots sont analysés et chacun est une nouvelle instance d'une classe. Dans ces classes, les méthodes equals et hashCode sont remplacées car les mots doivent être traités comme des équivalents, même s'il s'agit d'objets différents.

Le champ "texte" est une chaîne contenant le texte du mot.

public boolean equals(Object obj){ 
    Word temp = ((Word)obj); 
    return this.text.equals(temp.text); 
} 

public int hashCode(){ 
    return this.text.hashCode(); 
} 

public int compareTo (Object x) { 
    Word temp = ((Word)x); 

    if(this.text.compareTo(temp.text) < 0){ 
     return -1; 
    } 
    else if (this.text.equals(temp.text)){ 
     return 0; 
    } 
    else { 
     return 1; 
    } 
} 
+0

Pouvez-vous poster un exemple de code? –

+0

Et votre implémentation compareTo? –

+0

Hmm ... eh bien, cela * semble * correct (bien qu'il serait plus simple de renvoyer 'this.text.compareTo (temp.text))') - avez-vous un programme court mais complet qui démontre qu'il échoue? –

Répondre

3

Je suppose que vous utilisez un type de clé qui a une mauvaise application de equals (et probablement hashCode aussi), ou que le comparateur ne correspond pas à equals. Je ne peux pas penser à une autre raison au sommet de ma tête.

Si vous pouvez produire un programme court mais complet démontrant le problème, nous pouvons le confirmer.

Questions connexes