为什么ArrayList会这样做?

时间:2014-09-12 00:06:00

标签: java arraylist

我有几个问题需要解决。在这部分代码中, al.add(1," A2");添加1对ArrayList做了什么?在输出中,它看起来不像添加1对arraylist做了任何事情。另外,在代码的这一部分中,al.remove(2);似乎是从arraylist中删除A,但为什么呢?不应该是3,因为它排在第三位?

import java.util.*;

public class ArrayListDemo
{
    public static void main(String args[])
    {
        // create an array list
        ArrayList al = new ArrayList();
        System.out.println("Initial size of al: " + al.size());

        // add elements to the array list
        al.add("C");
        al.add("A");
        al.add("E");
        al.add("B");
        al.add("D");
        al.add("F");
        al.add(1, "A2");
        System.out.println("Size of al after additions: " + al.size());

        // display the array list
        System.out.println("Contents of al: " + al);
        // Remove elements from the array list
        al.remove("F");
        al.remove(2);
        System.out.println("Size of al after deletions: " + al.size());
        System.out.println("Contents of al: " + al);
    }
}

以下是代码的输出:

Initial size of al: 0

Size of al after additions: 7

Contents of al: [C, A2, A, E, B, D, F]

缺失后的al大小:5

Contents of al: [C, A2, E, B, D]

7 个答案:

答案 0 :(得分:1)

al.add(1, "A2");

在索引1中添加A2。记住ArrayList以索引0开头,因此输出恰到好处。与al.remove(2);相同。它删除了E的第3项。

点击以下指向read more about the add methodremove method的链接。

答案 1 :(得分:1)

第一个索引是0.当您在位置1处添加时,它会将其作为第二个项目,当您移除位置2时,您将删除第三个位置。

答案 2 :(得分:1)

al.add的第一个参数(1," A2");是索引。 所以,如果我有这样的事情:

[C,A,E,B,D,F]

我添加 al.add(1," A2");

我得到[C,A2,A,E,B,D,F]

第二个问题。

和数组或列表从索引0开始 所以这是 0 1 2 3 4 ....

所以,当我有这个:

[C,A2,A,E,B,D,F]

C在索引0中 A2在索引1中 和A在索引2

所以删除(2) 删除A

答案 3 :(得分:1)

ArrayLists和List都从索引0开始,所以当你这样做时

al.add(1, "A2");

您正在第二个位置插入A2,下方的所有其他元素都将向下移动。

当您删除2时,您正在删除第三项,并且下面的所有项目都会向上移动

答案 4 :(得分:1)

让我们稍微介绍一下代码......

al.add("C");
al.add("A");
al.add("E");
al.add("B");
al.add("D");
al.add("F");

生成

列表
["C", "A", "E", "B", "D", "F"]
//0    1    2    3    4    5

则...

al.add(1, "A2");

"A2"添加到此1的位置,因此我们现在有一个

列表
["C", "A2", "A", "E", "B", "D", "F"]
//0    1     2    3    4    5    6

则...

al.remove("F");

从列表中删除条目"F" ...

["C", "A2", "A", "E", "B", "D"]
//0    1     2    3    4    5

然后......

al.remove(2);

删除" A"从列表中,因为" A"是索引2的项目,请记住,Java是零索引

["C", "A2", "E", "B", "D"]
//0    1     2    3    4

仔细看看:

了解更多详情

答案 5 :(得分:0)

首先,几乎所有Java中的索引都是从0开始。

所以如果你有这个数组:

int[] example = {45, 33, 76, 21, 54};

然后示例[1]实际上等于SECOND元素 - 33!

所以,给你更多例子:

example[0] == 45 
example[1] == 33 
example[2] == 76 
example[3] == 21 
example[4] == 54

现在,让我们谈谈令你困惑的方法。

arrayList.add(index, item);

导致:al的内容:[C,A2,A,E,B,D,F]

所以在这里,你传递的第一件事是索引。第二件事是项目。索引是您添加新项目的位置。您将把新项目放入该索引中,并将其他所有内容移回其中。

所以,在你的例子中,你有:

arrayList.add(1,"A1");

结果是对的!术语" A1"在位置索引1中添加(记住,实际上是java中的第二个位置,因为你总是从0开始计数),其他一切都被1推回。

我希望这会有所帮助。祝你好运:)

答案 6 :(得分:0)

您应该记住索引从0开始,但不是1.例如,

List list = new ArrayList();

list.add("a");
list.add("b");

如果您想在列表中获取第一个元素“a”,则必须执行此操作:list.get(0),但不是list.get(1)