【问题标题】:How to put a element in specific location of array list如何将元素放在数组列表的特定位置
【发布时间】:2015-03-10 06:52:54
【问题描述】:

我想在数组列表的特定位置添加一个元素为此我尝试使用初始容量初始化数组列表。

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);
  }
}

输出

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

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

有没有办法通过特定的索引位置添加元素?

【问题讨论】:

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

标签: java arraylist


【解决方案1】:

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

您不能在空列表的索引 1 处插入元素,因为列表槽不能为空。如果您想要一个在插入大于其长度的索引之前扩展列表的函数,您可以使用:

static void addAtPos(List list, int index, Object o) {
    while (list.size() < index) {
        list.add(null);
    } 
    list.add(index, o);
}

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

【讨论】:

    【解决方案2】:

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

    因此,如果您想将每个项目与数字/索引相关联,最好使用地图。

    Map map = new HashMap<Integer, Object>();
    
    Object obj1 = new Object();
    
    map.put(1, obj1);
    

    【讨论】:

      【解决方案3】:

      您将获得IndexOutOfBoundsException,因为当您调用add(index, value) 时,该值必须不小于0 且不大于list.size()-1。在您的情况下,它应该是add(0, obj1)

      【讨论】:

        【解决方案4】:

        初始容量将仅用于设置底层数组的初始“缓冲区”大小。所以在调用new ArrayList(4) 之后,你的列表仍然是空的。

        如果您知道您的 List 将包含大约 10_000 个元素,请创建初始容量为 c = 10_000 + x 的 ArrayList 实例。这样,您将避免昂贵的 ArrayList#grow(newcapacity) (Java 8) 调用。

        方法ArrayList#add(position, element)也可以称为ArrayList#addAndMoveOtherToTheRight(position, element)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-05-06
          • 1970-01-01
          • 1970-01-01
          • 2011-03-22
          • 1970-01-01
          • 2021-08-27
          相关资源
          最近更新 更多