如果您想频繁地删除其元素,我建议您使用linkedlist而不是array。
使用array(array->linked list->remove elements->array)也很容易实现,但效率不高:
我认为,最有效的方法(如果您还想使用数组)是使用旧数组中的必要元素创建新数组:
Object[] filteredObjects = new Object[myObjects.length - elemToRemove.length];
int j = 0;
for (int i = 0; i < myObjects.length; i++) {
if (!shouldRemove(i)) {
filteredObjects[j++] = myObjects[i];
}
}
myObjects = filteredObjects;
我没出现
shouldRemove
. 我认为应该创建一组索引,而不是
elemToRemove
数组(索引是唯一的,因此在任何情况下都是首选方法)。然后
应去掉
可以更改为
elemToRemove.contains(i)
.
可以建议您使用google collections的另一种方式(我不确定它是否有效,但对我来说它看起来很优雅):
for (int index : elemToRemove) {
myObjects[i] = null;
}
myObjects = Collections2.filter(Arrays.asList(myObjects), new Predicate() {
@Override
public boolean apply(Object obj) {
return obj!= null;
}
}).toArray();