Глядя на 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>
вместо (см также: Эффективного Java 2-е издание, пункт 25: предпочитают списки массивы). Он имеет поведение equals
, которое вам нужно. Он медленнее, но он может быть достаточно быстрым.
Наконец, если вы настаиваете на использовании int[]
, вы можете просто обернуть его в свой собственный класс IntArray
и вместо этого введите ArrayList<IntArray>
. @Override equals
и hashCode
использовать Arrays.equals(int[], int[])
и hashCode(int[])
соответственно.
+1 за предложение использовать HashSet вместо List. ArrayList, безусловно, самый неэффективный сбор для специальных удалений. –
Да, я стараюсь по-разному покрывать все соответствующие базы в моих ответах. – polygenelubricants
+1 на столько уровней. –