【发布时间】:2012-07-11 08:59:57
【问题描述】:
我在这里有一个对象的通用数组列表我想删除某些元素,问题是当我用 for 循环迭代列表时,我不能做一个简单的remove() 序列,因为元素被移动了每次删除后。
谢谢
【问题讨论】:
-
您是否有要删除的特定值可用?
-
是的,在对象中我有一个布尔值,我必须检查并删除该项目
我在这里有一个对象的通用数组列表我想删除某些元素,问题是当我用 for 循环迭代列表时,我不能做一个简单的remove() 序列,因为元素被移动了每次删除后。
谢谢
【问题讨论】:
【讨论】:
你可以这样迭代列表...
public void clean(List<Kopek> kopeks) {
for(Kopek kopek : kopeks) {
if (kopek.isDirty())
kopeks.remove(kopek);
}
}
相当于...
public void clean1(List<Kopek> kopeks) {
Iterator<Kopek> kopekIter = kopeks.iterator();
while (kopekIter.hasNext()) {
Kopek kopek = kopekIter.next();
if (kopek.isDirty())
kopeks.remove(kopek);
}
}
不要这样做......(由于你已经观察到的原因。)
public void clean(List<Kopek> kopeks) {
for(int i=0; i<kopeks.size(); i++) {
Kopek kopek = kopeks.get(i);
if (kopek.isDirty())
kopeks.remove(i);
}
}
但是,我相信按索引而不是按对象删除更有效。按对象移除效率不高,因为列表在大多数情况下不是散列列表。
kopeks.remove(kopek);
对比
kopeks.remove(i);
要实现位置移除,通过适当处理移动目标...
public void clean(List<Kopek> kopeks) {
int i=0;
while(i<kopeks.size()) {
Kopek kopek = kopeks.get(i);
if (kopek.isDirty()) // no need to increment.
kopeks.remove(i);
else
i++;
}
}
【讨论】:
如果您有想要从ArrayList<T> 中删除的对象,您可以使用:
mArrayList.remove(object);
或者您可以使用Iterator 删除您的对象:
while(iterator.hasNext()){
if(iterator.next() == some condition for removal){
iterator.remove();
}
}
【讨论】:
您可以迭代 向后 并在遍历 ArrayList 时删除。这样做的好处是后续元素不需要移动,并且比向前移动更容易编程。
List<String> arr = new ArrayList<String>();
ListIterator<String> li = arr.listIterator(arr.size());
// Iterate in reverse.
while(li.hasPrevious()) {
String str=li.previous();
if(str.equals("A"))
{
li.remove();
}
}
【讨论】:
为要从原始 ArrayList 中删除的数据创建一个单独的 ArrayList,然后通过使用 for 循环对其进行循环来删除这些元素。
ArrayList<Myobj> arr = new ArrayList<Myobj>();
for (Myobj o : arr){
arr.remove(arr.indexOf(o));
}
【讨论】:
不使用迭代器也解决了这个问题。我想要做的就是获取要删除的索引并按降序对其进行排序,然后将其从列表中删除。 检查下面的代码
Arraylist<obj> addlist = getlist();
List<Integer> indices = new ArrayList<Integer>();
for(int i=0; i<addlist.size() ;i++){
if(addlist.get(i).getDelete()){
indices.add(i);
}
}
Collections.sort(indices, Collections.reverseOrder());
for (int i : indices)
addlist.remove(i);
【讨论】: