En regardant le posX
et posY
, je suis curieux de savoir si quelque chose comme ArrayList<Point>
est une meilleure solution pour vous.
La raison pour laquelle le remove
n'a pas pu trouver le tableau est que le nouveau tableau n'est pas equals
dans le tableau déjà dans la collection.
(new int[0]).equals(new int[0]) // false!
Si vous créer votre propre classe Point
, alors vous pouvez @Override equals
à se comporter comme vous voulez, et vous pouvez simplement appeler remove(new Point(posX, posY))
.
Vous devriez également envisager d'avoir une place Set<Point> positionList
, car les mises en œuvre offrent le retrait beaucoup plus rapide (O(1)
pour HashSet
, O(log N)
pour TreeSet
). Rappelez-vous à @Override hashCode
(que vous avez à faire de toute façon si vous @Override equals
), et faites Point implements Comparable<Point>
(ou fournissez un Comparator<Point>
externe) si vous voulez utiliser TreeSet
ou avez besoin de trier les points dans d'autres contextes.
Si votre int[]
a de nombreux éléments et une coutume Point
classe n'est pas applicable, alors vous voudrez peut-être envisager de passer à la place List<Integer>
(voir aussi: Effective Java 2e édition, point 25: préférer des listes à des tableaux). Il a le comportement equals
dont vous avez besoin. C'est plus lent, mais ça peut être encore assez rapide. Enfin, si vous insistez pour utiliser int[]
, vous pouvez simplement l'insérer dans votre propre classe IntArray
et utiliser un ArrayList<IntArray>
à la place. @Override equals
et hashCode
respectivement pour utiliser Arrays.equals(int[], int[])
et hashCode(int[])
.
+1 pour la suggestion d'utiliser HashSet au lieu d'une liste. ArrayList est certainement la collection la plus inefficace pour les suppressions ad hoc. –
Oui, j'essaie de couvrir toutes les bases pertinentes de manière incrémentale dans mes réponses. – polygenelubricants
+1 sur tant de niveaux. –