Java 如何将元素放置在数组列表的特定位置

Java 如何将元素放置在数组列表的特定位置,java,arraylist,Java,Arraylist,我想在数组列表的特定位置添加一个元素,我试图用初始容量初始化数组列表 import java.util.ArrayList; public class AddInArrayList{ public static void main(String[] args) { ArrayList list = new ArrayList(4); Object obj1 = new Object(); list.add(1, obj1); } } 输出 线程“main”java.l

我想在数组列表的特定位置添加一个元素,我试图用初始容量初始化数组列表

import java.util.ArrayList;

 public class AddInArrayList{
  public static void main(String[] args) {
  ArrayList list = new ArrayList(4);
  Object obj1 = new Object();
   list.add(1, obj1);
  }
}
输出

线程“main”java.lang.IndexOutOfBoundsException中的异常:

索引:1,大小:0 在java.util.ArrayList.add(ArrayList.java:359)处 位于AddInArrayList.main(AddInArrayList.java:7)


有没有办法按特定索引位置添加元素?

数组不允许您在大于array.size的索引处执行插入

因此,如果要将每个项目与数字/索引关联,最好使用映射

Map map = new HashMap<Integer, Object>();

Object obj1 = new Object();

map.put(1, obj1);
Map Map=newhashmap();
对象obj1=新对象();
map.put(1,obj1);

您将获得
索引自动边界异常
,因为当您调用
add(index,value)
时,该值必须不小于0且不大于
list.size()-1
。在您的情况下,它应该是添加(0,obj1)

您对以下含义感到困惑:您传递给构造函数的数字不设置初始列表大小

无法在空列表的索引1处插入元素,因为列表插槽不能为空。如果希望函数在插入长度大于其长度的索引之前展开列表,可以使用:

static void addAtPos(List list, int index, Object o) {
    while (list.size() < index) {
        list.add(null);
    } 
    list.add(index, o);
}
static void addAtPos(列表、int索引、对象o){
while(list.size()

也就是说,
ArrayList
s基于的数组在中间插入时性能不佳。因此,不同的数据结构几乎肯定更适合您的问题,但您必须让我们知道您要实现的目标。

初始容量将仅用于设置基础阵列的初始“缓冲区”大小。所以在调用
newarraylist(4)
之后,列表仍然是空的

如果您知道列表将包含大约10000个元素,请使用初始容量
c=10\u 000+x
创建ArrayList实例。这样可以避免昂贵的
ArrayList#grow(newcapacity)
(java8)调用


方法
ArrayList#add(position,element)
也可以称为
ArrayList#add并将其他方法移动到右侧(position,element)

它没有任何解决方法。我需要一种在特定位置添加元素的方法。An不是数组!