Java 添加到空ArrayList的中间?

Java 添加到空ArrayList的中间?,java,android,Java,Android,如果我创建一个大小为5的新arraylist Player P; ArrayList<Player> orderedPlayers = new ArrayList<Player>(5); 我得到了一个索引自动边界。。。如果我使用set而不是add,我也会得到indexoutofbounds orderedPlayers.set(2, P); 事实上,我向arraylist添加p的唯一方法是使用0索引 orderedPlayers.add

如果我创建一个大小为5的新arraylist

    Player P;
    ArrayList<Player> orderedPlayers = new ArrayList<Player>(5);
我得到了一个索引自动边界。。。如果我使用set而不是add,我也会得到indexoutofbounds

    orderedPlayers.set(2, P);
事实上,我向arraylist添加p的唯一方法是使用0索引

    orderedPlayers.add(0, P);

还有一些奇怪的原因,当我在eclipse中调试时,我看到元素被添加到OrderedPlayer的第4个索引中,而不是第0个。。。是ArrayList马车还是我完全错过了什么?如何添加到空ArrayList的中间?

5是初始容量,而不是实际大小。您不能添加到空数组列表的中间。

5是初始容量,而不是实际大小。无法添加到空数组列表的中间。

在参数中使用数字创建数组时,此数字将用于设置初始容量。这样列表就不需要为
add()
的“每次”调用创建新数组。如果可以确定列表将包含100个元素,则可以使用
newarraylist(100)
。这并不意味着100个元素存在或可以访问

每个ArrayList实例都有一个容量。容量是用于存储列表中元素的数组的大小。它始终至少与列表大小一样大。当元素添加到ArrayList时,其容量会自动增长。除了添加要素具有恒定的摊余时间成本这一事实之外,没有详细说明增长政策

应用程序可以在使用ensureCapacity操作添加大量元素之前增加ArrayList实例的容量。这可能会减少增量重新分配的数量

在参数中使用数字创建时,此数字将用于设置初始容量。这样列表就不需要为
add()
的“每次”调用创建新数组。如果可以确定列表将包含100个元素,则可以使用
newarraylist(100)
。这并不意味着100个元素存在或可以访问

每个ArrayList实例都有一个容量。容量是用于存储列表中元素的数组的大小。它始终至少与列表大小一样大。当元素添加到ArrayList时,其容量会自动增长。除了添加要素具有恒定的摊余时间成本这一事实之外,没有详细说明增长政策

应用程序可以在使用ensureCapacity操作添加大量元素之前增加ArrayList实例的容量。这可能会减少增量重新分配的数量


数组列表是动态结构。。。如果您希望能够在特定位置添加内容,则可能必须使用数组来代替。

数组列表是动态结构。。。如果希望能够在特定位置添加内容,则可能必须使用数组。

可以通过循环中的空对象初始化数组列表


或者即使大小是固定的。然后使用数组而不是列表。

您可以通过循环中的空对象初始化数组列表


或者即使大小是固定的。然后使用数组而不是列表。

您似乎有一种错误的印象,即当您编写
新的ArrayList(5)
时,您会得到类似于5元素数组的东西。你不是。您将得到一个空列表,该列表恰好由一个内部数组支持,该数组最初最多可容纳5个元素。但是,列表本身根本没有元素


列表是动态的,随着元素的添加和删除而增长和收缩。从0个元素开始。如果再添加5名玩家,列表将包含5个元素。如果您只使用普通的
add(T)
方法而不使用索引,那么最终将按照元素的添加顺序生成元素。

您似乎有一种错误的印象,即当您编写
新的ArrayList(5)
时,您会得到类似于5元素数组的东西。你不是。您将得到一个空列表,该列表恰好由一个内部数组支持,该数组最初最多可容纳5个元素。但是,列表本身根本没有元素


列表是动态的,随着元素的添加和删除而增长和收缩。从0个元素开始。如果再添加5名玩家,列表将包含5个元素。如果只使用普通的无索引的
add(T)
方法,那么最终将按照元素添加的顺序生成元素。

通过构造一个具有初始容量的ArrayList(int initialCapacity),可以大致指示在Java增加其大小之前列表可以达到的大小


您没有像在阵列中那样分配插槽。ArrayList的大小取决于列表中元素的数量,您不能为大于其大小的索引插入或设置值。

通过构造具有初始容量的ArrayList(int initialCapacity),您可以大致指示在Java增加其大小之前列表可以达到的大小


您没有像在阵列中那样分配插槽。ArrayList的大小取决于列表中元素的数量,您不能插入或设置大于其大小的索引值。

以下是初始化OrderedPlayer可能需要执行的操作:

ArrayList<Player> orderedPlayers =
  new ArrayList<Player>(Collections.nCopies( 5, null ));
ArrayList OrderedPlayer=
新的ArrayList(Collections.nCopies(5,null));

然后你有一个5个空元素的列表,在这里你可以插入它的中间。

这里可能是为了初始化有序的玩家你想做的事情:

ArrayList<Player> orderedPlayers =
  new ArrayList<Player>(Collections.nCopies( 5, null ));
ArrayList OrderedPlayer=
新的ArrayList(Collections.nCopies(5,null));

然后你有一个5个空元素的列表,这时你可以在中间插入。

这好像是想把列表做一个不做的事情。如果你真的想要数组,你应该使用arra