縱觀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