Oui, c'est une limitation connue.
Les méthodes comme contains(), indexOf(), remove(), ou tous les trucs qui cherchent un objet dans une collection, ont un point commun :
elles se basent sur la méthode public boolean equals(Object).
En gros, quand tu fais
int index = vector.contains(monObjet);
Ce qui va se passer, c'est une boucle sur tout les éléments de vector, et pour chaque élément e il va appeler :
Si c'est true, la boucle considère que l'objet a été trouvé, si c'est false il passe au suivant.
C'est clair ? Bien.
C'est pour ça que quand on crée de nouvelles classes, dont les instances vont être stockées dans des collections et qu'on doit pouvoir les chercher à l'intérieur, il faut redéfinir la méthode public boolean equals(Object), qui dira donc si l'objet en cours est égal à l'objet passé en paramètre.
Si on ne le fait pas, la classe héritera de la méthode equals() de Object, et a priori c'est pas ce qu'on veut.
Bien. Et alors ?
Et alors en Java, les tableaux n'implémentent pas equals(). Par conséquent, deux tableaux qui contiennent la même chose ne sont pas considérés égaux. Une instance de tableau n'est égale qu'à elle-même.
Donc c'est pas possible avec des tableaux.
=> Ce que tu peux faire, c'est utiliser un Vector à la place de tableaux : ce qui te donne un Vector<Vector<Character>>
=> Et en fait, vu que les Vector ce n'est utile que si tu as besoin d'accès synchronisé, ce qui n'est pas le cas je suppose, tu ferais mieux d'utiliser des List : List<List<Character>>.
=> Par ailleurs, List<Character> ou char[], ce n'est utile que si les caractères doivent pouvoir être changés. Si ce n'est pas le cas, il faut bien sûr utiliser String. C'est juste plus simple.
Partager