求一最高效的方式,遍历,修改,删除一个ArrayList中的若干元素?例如:
for (int i = 0; p_arrayList.size() < i; i++)
{
if (...)
{
p_arrayList.remove(i);
} if (...)
{
new ObjectXX = .....;
p_arrayList.set(i , ObjectXX);
}
}
for (int i = 0; p_arrayList.size() < i; i++)
{
if (...)
{
p_arrayList.remove(i);
} if (...)
{
new ObjectXX = .....;
p_arrayList.set(i , ObjectXX);
}
}
会outofbounds
Object o = null;
while(it.hasNext()){
o = it.next();
o.setId(1234); // 修改
it.remove(); // 删除
}
import java.util.ArrayList;/**
*
* @author wdman
* @version 1.0 2007-12-26
*/
public class TestList { /**
* @param args
*/
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("data");
list.add("data2");
list.add("data");
list.add("data4");
list.add("data");
list.add("data2");
list.add("data");
list.add("data8");
list.add("data");
list.add("data10");
list.add("data");
int j = list.indexOf("data2");
while (j > -1) {
list.set(j, "new data");
j = list.indexOf("data2");
}
while (list.contains("data")) {
list.remove("data");
}
for (int i=0; i<list.size(); i++) {
System.out.println(list.get(i));
}
}
}
while (list.contains("data")) {
list.remove("data");
}
我觉得这个样子的代码效率不高,因为contains总是从list第一个元素查找,
每次都要从list第一个list查找,是不是重复查找了,这样如果list较大,效率会降低的。
第二 如果需要定位并且有删除最好从后向前遍历 因为如果从前向后遍历当你删除的时候会影响到后面的记录size的大小也会变 很有可能超出下标范围
String st = "123";
String comp = "";
sum=win_list.size()-1;
for(;sum<0;sum--){
comp=win_list.get(sum).toString();
if(st.equals(comp)){
win_list.remove(comp);
}
}
从后向前遍历
如果用于删除和插入建议使用 LikedList