Java ArrayList IndexOf - Trouver Objet De L'Indice De
Permet de dire que j'ai une classe
public class Data{
public int k;
public int l;
public Data(int k, int l){
this.k = k;
this.l = l;
}
public boolean equals(Date m){
if(this.k == m.k && this.l = m.l)
return true;
return false;
}
}
Et j'ai ajouter quelques objets de Données à une liste de tableaux:
ArrayList<Data> holder = new ArrayList<Data>;
Data one = new Data(0,0);
Data two = new Data(0,4);
Data three = new Data(0,5);
Pourquoi ne indexOf pas la trouver?:
holder.indexOf(new Data(0,4)); //returns -1
Est indexOf mieux que de passer par l'ensemble de la liste des ensembles de moi-même? Ou ai-je raté quelque chose.
Le problème est que vous ne prévalent pas
equals
méthode, mais la surcharge de la place.OriginalL'auteur p1001 | 2013-07-08
Vous devez vous connecter pour publier un commentaire.
La
indexOf()
méthode ne aller à travers l'ensemble de la liste. Voici un extrait de Java 7 code source:Il ferais mieux de laisser Java aller à travers elle que de l'écrire vous-même. Assurez-vous que votre
equals
méthode est suffisant pour trouver l'objet que vous voulez. Vous aurez également besoin de remplacerhashCode()
.Je ne vais pas écrire votre
equals
méthode, mais je vous recommande au moins:if(boolean_expr) { return true; }
; il suffit de retourner l'expression booléenne.equals
de la méthode de la signature de la qui nécessite uneObject
paramètre, pasDate
.OriginalL'auteur
La signature de votre
equals
méthode est mauvaise. Vous n'êtes pas en substitution de laequals
dansObject
, mais juste de le surcharger.Pour remplacer le comportement de
equals
méthode dansObject
, votre signature doit correspondre exactement à celle qui est enObject
. Essayez ceci:En outre, comme d'autres l'ont suggéré, c'est une bonne idée pour remplacer
hashCode
méthode aussi pour votre objet fonctionne correctement dans la carte en fonction des collections.OriginalL'auteur
La réponse de Makoto est droit. La même, je dirais. Mais vous avez quelques erreurs dans ton code ci-dessus.
À votre question:
Makoto réponse est une solution.
Ma solution est d'utiliser l'aide d'eclipse pour générer automatiquement hashcode et est égal à méthodes. Comme ceci:
OriginalL'auteur
Par convention que vous voulez redéfinir hashcode également lorsque vous remplacez est égal à
Vous allez probablement trouver que le indexOf utilise la méthode hashcode pour correspondre à l'objet ne l'est égal à
Si vous utilisez eclise pour éditer le code - eclipse va générer une bonne equals et hashcode méthode pour vous à partir du menu "source".
indexOf
utiliseequals
.OriginalL'auteur