我循环遍历列表A以找到X.然后,如果找到了X,它将被存储到列表B中。之后,我想从列表A中删除X.因为速度是我的应用程序的一个重要问题,我想从A中删除X而不通过A循环。这应该是可能的,因为我已经知道A在A中的位置(我在第一行找到了它的位置)。我怎么能这样做?
for(int i = 0; i<n; i++) {
Object X = methodToGetObjectXFromA();
B.add(X);
A.remove(X); // But this part is time consuming, as I unnecessarily loop through A
}
谢谢!
答案 0 :(得分:2)
不是从yhe方法返回对象,而是返回索引,然后按索引删除:
int idx = methodToGetObjectIndexFromA();
Object X = A.remove(idx); // But this part is time consuming, as I unnecessarily loop through A
B.add(X);
但是,请注意,由于数组元素可能会移动,remove
方法可能仍然很慢。
答案 1 :(得分:1)
您可以使用迭代器,如果性能有问题,最好使用LinkedList作为要删除的列表:
public static void main(String[] args) {
List<Integer> aList = new LinkedList<>();
List<Integer> bList = new ArrayList<>();
aList.add(1);
aList.add(2);
aList.add(3);
int value;
Iterator<Integer> iter = aList.iterator();
while (iter.hasNext()) {
value = iter.next().intValue();
if (value == 3) {
bList.add(value);
iter.remove();
}
}
System.out.println(aList.toString()); //[1, 2]
System.out.println(bList.toString()); //[3]
}
答案 2 :(得分:0)
如果您存储了要在第二个集合中删除的所有对象,则可以使用ArrayList#removeAll(Collection)
从此列表中删除其中包含的所有元素 指定的集合。 的参数强>: 包含要从此列表中删除的元素的c集合
在这种情况下,只需执行
A.removeAll(B);
退出循环时。
它调用ArrayList#batchRemove
,它将使用循环删除对象,但您不必自己动手。