求一最高效的方式,遍历,修改,删除一个ArrayList中的若干元素?例如:
for (int i = 0; p_arrayList.size() < i; i++)
{
 if (...)
 {
  p_arrayList.remove(i);
 } if (...)
 {
  new ObjectXX = .....;
  p_arrayList.set(i , ObjectXX);
 }
}

解决方案 »

  1.   

    如果要修改、删除什么的,可以使用LinkedList,效率要比ArrayList高。
      

  2.   

    不能这样删除的
    会outofbounds
      

  3.   

    Iterator it = p_arrayList.iterator();
    Object o = null;
    while(it.hasNext()){
      o = it.next();
      o.setId(1234); // 修改  
      it.remove(); // 删除
    }
      

  4.   


    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));
    }

    }
    }
      

  5.   


    while (list.contains("data")) {
                list.remove("data");
            }
    我觉得这个样子的代码效率不高,因为contains总是从list第一个元素查找,
    每次都要从list第一个list查找,是不是重复查找了,这样如果list较大,效率会降低的。
      

  6.   

    第一 如果不需要明确定位可以采取6楼给出的用迭代器的方法 
    第二 如果需要定位并且有删除最好从后向前遍历 因为如果从前向后遍历当你删除的时候会影响到后面的记录size的大小也会变 很有可能超出下标范围
      

  7.   

    假设win_list是一个已经存有N个元素的ArrayList
    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);
      }  
    }
    从后向前遍历
      

  8.   

      这是对于集合类的理解 , ArrayList 用于查询,比较方便,而且高效。
    如果用于删除和插入建议使用 LikedList