在指定的索引处将对象添加到ArrayList

J. *_*aes 133 java android arraylist

我认为这是一个相当简单的问题,但我无法弄清楚如何正确地做到这一点.

我有一个空的arraylist:

ArrayList<object> list = new ArrayList<object>();
Run Code Online (Sandbox Code Playgroud)

我有一些我想要添加的对象,每个对象都必须处于某个位置.然而,必须以各种可能的顺序添加它们.当我尝试这个,它不起作用,我得到一个IndexOutOfBoundsException:

list.add(1, object1)
list.add(3, object3)
list.add(2, object2)
Run Code Online (Sandbox Code Playgroud)

我曾尝试是填充ArrayListnull,然后做以上.它有效,但我认为这是一个可怕的解决方案.还有另一种方法吗?

sup*_*erM 199

你可以这样做:

list.add(1, object1)
list.add(2, object3)
list.add(2, object2)
Run Code Online (Sandbox Code Playgroud)

将object2添加到位置2后,它会将object3移动到位置3.

如果你希望object3始终位于position3,我建议你使用HashMap,其中position是key,object是value.

  • 哈希映射确实能够解决这个问题.我想我会选择那个,因为当位置2没有对象时,我似乎无法在位置3添加内容. (3认同)

小智 28

您可以使用Array对象并将其转换为ArrayList-

Object[] array= new Object[10];
array[0]="1";
array[3]= "3";
array[2]="2";
array[7]="7";

List<Object> list= Arrays.asList(array);
Run Code Online (Sandbox Code Playgroud)

ArrayList将是 - [1,null,2,3,null,null,null,7,null,null]

  • 一个缺点是您必须提前知道尺寸。 (2认同)

med*_*pal 15

如果是这种情况,那么为什么不考虑使用常规数组,初始化容量并将对象放在所需的索引处.

Object[] list = new Object[10];

list[0] = object1;
list[2] = object3;
list[1] = object2;
Run Code Online (Sandbox Code Playgroud)


Eng*_*321 13

您还可以重写ArrayList以在您的大小和要添加的元素之间插入空值.

import java.util.ArrayList;


public class ArrayListAnySize<E> extends ArrayList<E>{
    @Override
    public void add(int index, E element){
        if(index >= 0 && index <= size()){
            super.add(index, element);
            return;
        }
        int insertNulls = index - size();
        for(int i = 0; i < insertNulls; i++){
            super.add(null);
        }
        super.add(element);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以在ArrayList中的任何位置添加.例如,这个主要方法:

public static void main(String[] args){
    ArrayListAnySize<String> a = new ArrayListAnySize<>();
    a.add("zero");
    a.add("one");
    a.add("two");
    a.add(5,"five");
    for(int i = 0; i < a.size(); i++){
        System.out.println(i+": "+a.get(i));
    }
}   
Run Code Online (Sandbox Code Playgroud)

从控制台产生这个结果:

0:零

1:一

2:两个

3:null

4:null

5:五


Mis*_*ble 9

我提请你注意ArrayList.add文档,它说 IndexOutOfBoundsException如果索引超出范围(index < 0 || index > size())

size()在打电话之前,请检查列表list.add(1, object1)

  • 据我了解,“问题”是在位置 3 处添加元素,即使位置 2 中没有元素...... (2认同)

Mii*_*nen 5

您需要使用空值填充空索引.

while (arraylist.size() < position)
{
     arraylist.add(null);
}

arraylist.add(position, object);
Run Code Online (Sandbox Code Playgroud)