为什么我的arrayList在删除时跳过一个元素

时间:2017-05-20 18:41:24

标签: java arraylist

我想删除一个数组的三个元素(索引0,1和2),然后将接下来的三个元素移入索引0,1,2。由于某种原因,数组没有删除正确的元素

       ArrayList <String> tryThis = new <String>ArrayList();
       tryThis.add("first");
       tryThis.add("second");
       tryThis.add("third");
       tryThis.add("fourth");
       tryThis.add("fifth");
       tryThis.add("sixth");
       tryThis.add("seventh");
       tryThis.add("eighth");
       tryThis.add("Ninth");

       System.out.println(tryThis.get(0) + tryThis.get(1) + tryThis.get(2));

       tryThis.remove(0);  
       tryThis.remove(1);
       tryThis.remove(2);

       System.out.println(tryThis.get(0) + tryThis.get(1) + tryThis.get(2));

我希望在删除之前打印“第一,第二和第三”,然后再打印“第四,第五和第六”。但是,它会打印“第一个第二个第三个”,然后在删除后打印“第二个第四个第六个”。为什么呢?

4 个答案:

答案 0 :(得分:0)

删除索引0处的元素后,前一个索引1元素将转移到索引0,依此类推。所以你应该在索引0删除三次:

tryThis.remove(0);  
tryThis.remove(0);
tryThis.remove(0);

答案 1 :(得分:0)

remove(0)方法通过删除列表的第一个(索引0)元素来更改列表,因此所有其他元素的索引也会更改。尝试拨打remove(0)三次以获得您期望的结果。

答案 2 :(得分:0)

你有两种可能性。

您可以运行以下代码3次(例如,使用for循环):

tryThis.remove(0);

或者,您以相反的方式运行代码:

tryThis.remove(2);  
tryThis.remove(1);
tryThis.remove(0);

请记住,使用remove(int index),它会移除此列表中指定位置的元素,并将所有后续元素移到左侧(从索引中减去一个)。

P.s:如前所述,您应该使用正确的语法:

ArrayList <String> tryThis = new ArrayList<String>();

类型很明显(隐含的,在你的情况下和使用中),你也可以离开第二个<String>

ArrayList <String> tryThis = new ArrayList<>();

答案 3 :(得分:0)

删除时,按降序删除。 来自源代码: 删除此列表中指定位置的元素。      将任何后续元素向左移位(从其中减去一个元素)       指数)。

public static void main(String[] args) {
         ArrayList <String> tryThis = new <String>ArrayList();
           tryThis.add("first");
           tryThis.add("second");
           tryThis.add("third");
           tryThis.add("fourth");
           tryThis.add("fifth");
           tryThis.add("sixth");
           tryThis.add("seventh");
           tryThis.add("eighth");
           tryThis.add("Ninth");

           System.out.println(tryThis.get(0) + tryThis.get(1) + tryThis.get(2));

           int i[] = {2,1,0};

           for (int j = 0; j < i.length; j++) {
               tryThis.remove(i[j]);
           }

           System.out.println(tryThis.get(0) + tryThis.get(1) + tryThis.get(2));
    }