添加到arraylist意外的行为

时间:2015-06-22 02:07:28

标签: java arraylist

我不确定这里发生了什么。任何启蒙都会受到高度赞赏。

ArrayList<Integer> al = new ArrayList<>();

for(int i = 0; i < 10; i++)
    al.add(i);

for(Integer i : al)
    System.out.println(al.get(i));

al.add(2,8); //should add the value 8 to index 2? 

System.out.println();
for(Integer i : al)
    System.out.println(al.get(i));

输出

0
1
2
3
4
5
6
7
8
9

0
1
7
8
2
3
4
5
6
7
8

为什么在7和8中添加...以及9在哪里?

2 个答案:

答案 0 :(得分:12)

您收到此行为是因为您使用get()中包含Integer的{​​{1}}来调用ArrayList

for (Integer i : al)
    System.out.println(al.get(i));   // i already contains the entry in the ArrayList

al.add(2,8); //should add the value 8 to index 2? 

System.out.println();
for (Integer i : al)
    System.out.println(al.get(i));   // again, i already contains the ArrayList entry

将您的代码更改为此,一切正常:

for (Integer i : al)
    System.out.println(i);

<强>输出:

0
1
8    <-- you inserted the number 8 at position 2 (third entry),
2        shifting everything to the right by one
3
4
5
6
7
8
9

答案 1 :(得分:2)

您正在使用增强型循环,然后使用get打印该值;您应该使用get在所有索引上打印值,或者使用不带get的增强循环。更好的是,使用Arrays.toString进行打印以避免这种混淆:

for(int i = 0; i < 10; i++)
    al.add(i);
Arrays.toString(al);
al.add(2,8);
Arrays.toString(al);