纵观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
代替,因为实现(TreeSet
O(1)
为HashSet
,O(log N)
)提供了更快的去除。如果您想使用TreeSet
或需要在其他上下文中对点进行排序,请记住@Override hashCode
(如果您使用@Override equals
,您必须执行此操作),并且使Point implements Comparable<Point>
(或提供外部Comparator<Point>
)。
如果您int[]
有许多元素和自定义Point
类是不适用的,那么你可能要考虑切换到List<Integer>
代替(参见:有效的Java第二版,第25项:宁愿名单阵列)。它具有您需要的equals
行为。速度较慢,但速度可能仍然很快。
最后,如果您坚持使用int[]
,您可以将其包装在您自己的IntArray
类中,并使用ArrayList<IntArray>
代替。 @Override equals
和hashCode
分别使用Arrays.equals(int[], int[])
和hashCode(int[])
。
+1使用,而不是一个列表的HashSet的建议。 ArrayList当然是ad hoc删除的最低效的集合。 – 2010-03-05 17:04:31
是的,我试图在我的回答中以递增的方式涵盖所有相关基础。 – polygenelubricants 2010-03-05 17:06:35
+1这么多级别。 – 2010-03-05 17:17:23