我想知道第三个java为什么不能删除删除

解决方案 »

  1.   

    循环中你有再取出list的元素了
      

  2.   

    换个for试试:
    for(int i = list.size()-1; i >= 0; i--)
      

  3.   

    代码:
    package csdn_629;import java.util.ArrayList;public class TextList {
    public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<String>();
    list.add("java");
    list.add("aaa");
    list.add("java");
    list.add("java");
    list.add("bbb");
    System.out.println(list);

    for(int i=0; i<list.size(); i++){
    if(list.get(i).equals("java")){
    String s = list.remove(i);
    System.out.println(s);
    s = list.get(i);
    System.out.println(i);
    i = 0;//加上这句话!
    }
    }
    System.out.println(list);
    }}
      

  4.   

    remove的时候size变小了,但是i还是递增
      

  5.   

    你这题在于理解remove()方法出错了。你先看下remove()方法的源码:
     public E remove(int index) {
            rangeCheck(index);        modCount++;
            E oldValue = elementData(index);        int numMoved = size - index - 1;
            if (numMoved > 0)
                System.arraycopy(elementData, index+1, elementData, index,
                                 numMoved);
            elementData[--size] = null; // Let gc do its work        return oldValue;
        }remove()方法执行后,它的数组下标是会变化的,比如你删除下标为0的元素,那么原先下边为1的元素会变成下标为0。就跟排队一样,后面的要往前面挤。而你是for循环中,i是不断加1的。所以才会出现这样的错误。
      

  6.   

    二楼的for循环是不对,会产生下标越界异常。
      

  7.   

    import java.util.ArrayList;
    import java.util.Iterator;
     
    public class TestList {
        public static void main(String[] args) {
            ArrayList<String> list = new ArrayList<String>();
            list.add("java");
            list.add("aaa");
            list.add("java");
            list.add("java");
            list.add("bbb");
            System.out.println(list);
             
            for(Iterator<String> itor = list.iterator(); itor.hasNext();){
                String s = itor.next();
                if("java".equals(s)) itor.remove();
            }
            System.out.println(list);
        }
     
    }>javac -encoding UTF-8 TestList.java
    >Exit code: 0    Time: 2.118
    >java -cp . TestList
    [java, aaa, java, java, bbb]
    [aaa, bbb]
    >Exit code: 0    Time: 5.336
      

  8.   

      for(int i =s-1;i>=0;i--){
             if("java".equals(list.get(i))){
          list.remove(i);
          
    //      System.out.println(list.size());
    //      //System.out.println(list);
    //     // s=list.get(i);
    //      //System.out.println(i);
        
          }
      

  9.   

    我奇怪的是 list.remove(i) 可以用String 接受?
      

  10.   

    remove之后,i依旧是从0开始的,后面的会自动补到前面,所以不能用i++。
    两种方式处理:
    1、弄两个开始一样的list,一个用于判断,一个用于remove,最后remove之后的那个就符合要求。
    2、用if语句进行判断,处理i的值。