Глядя на posX
и posY
, мне любопытно, будет ли лучше для вас что-то вроде ArrayList<Point>
.
Причина, по которой remove
не может найти массив, заключается в том, чтопотому что новый массив не equals
для массива уже в коллекции.
(new int[0]).equals(new int[0]) // false!
Если вы создаете свой собственный класс Point
, тогда вы можете @Override equals
вести себя так, как хотите, и выможно просто позвонить remove(new Point(posX, posY))
.
Вместо этого вам следует рассмотреть возможность использования Set<Point> positionList
, поскольку реализации предлагают гораздо более быстрое удаление (O(1)
для HashSet
, O(log N)
для TreeSet
).Не забудьте @Override hashCode
(что вам все равно придется делать, если вы @Override equals
), и набрать Point implements Comparable<Point>
(или предоставить внешний Comparator<Point>
), если вы хотите использовать TreeSet
или вам нужно отсортировать точки в других контекстах..
Если ваш int[]
имеет много элементов и пользовательский класс Point
не применим, тогда вы можете рассмотреть возможность перехода на List<Integer>
(см. Также: Effective Java 2nd Edition *)1032 *, пункт 25: предпочесть списки массивам).Он имеет поведение equals
, которое вам нужно.Это медленнее, но все же может быть достаточно быстрым.
Наконец, если вы настаиваете на использовании int[]
, вы можете просто обернуть его в свой собственный класс IntArray
и вместо него иметь ArrayList<IntArray>
.@Override equals
и hashCode
для использования Arrays.equals(int[], int[])
и hashCode(int[])
соответственно.