关于Java:如何在ArrayList中的特定位置插入对象

How to insert an object in an ArrayList at a specific position

假设我有一个大小为n的对象的ArrayList。 现在,我想在特定位置插入另一个对象,比方说在索引位置k(大于0且小于n),并且我希望索引位置k或之后的其他对象向前移动一个索引位置。 因此,有什么方法可以直接在Java中执行此操作。 实际上,我想在添加新对象时保持列表排序。


要将值插入特定索引处的ArrayList中,请使用:

1
public void add(int index, E element)

此方法将移动列表的后续元素。但是您不能保证列表将保持排序状态,因为您插入的新对象可能会根据排序顺序位于错误的位置。

要在指定位置替换元素,请使用:

1
public E set(int index, E element)

此方法替换元素中指定位置的元素
列出具有指定元素的元素,并先前返回该元素
在指定位置。


这是在特定索引处插入的简单arraylist示例

1
2
3
4
5
6
7
8
9
ArrayList<Integer> str=new ArrayList<Integer>();
    str.add(0);
    str.add(1);
    str.add(2);
    str.add(3);
    //Result = [0, 1, 2, 3]
    str.add(1, 11);
    str.add(2, 12);
    //Result = [0, 11, 12, 1, 2, 3]


请注意,当您在某个位置插入列表时,实际上是在列表的当前元素内的动态位置插入。看这里:

http://tpcg.io/0KmArS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package com.tutorialspoint;

import java.util.ArrayList;

public class ArrayListDemo {
   public static void main(String[] args) {

      // create an empty array list with an initial capacity
      ArrayList<Integer> arrlist = new ArrayList<Integer>(5);

      // use add() method to add elements in the list
      arrlist.add(15, 15);
      arrlist.add(22, 22);
      arrlist.add(30, 30);
      arrlist.add(40, 40);

      // adding element 25 at third position
      arrlist.add(2, 25);

      // let us print all the elements available in list
      for (Integer number : arrlist) {
         System.out.println("Number =" + number);
      }  
   }
}

$javac com/tutorialspoint/ArrayListDemo.java

$java -Xmx128M -Xms16M com/tutorialspoint/ArrayListDemo

1
2
3
4
Exception in thread"main" java.lang.IndexOutOfBoundsException: Index: 15, Size: 0
    at java.util.ArrayList.rangeCheckForAdd(ArrayList.java:661)
    at java.util.ArrayList.add(ArrayList.java:473)
    at com.tutorialspoint.ArrayListDemo.main(ArrayListDemo.java:12)


实际上,针对特定问题的解决方法是arrayList.add(1,"INSERTED ELEMENT");,其中1是位置


例如:

我想将arrayList中的元素从23th移到1th(index == 0),所以我将23th元素放入一个临时值,然后从列表中删除,将其插入列表中的1th。它是可行的,但效率不高。

1
2
3
4
5
6
7
8
 List<ItemBean> list = JSON.parseArray(channelJsonStr,ItemBean.class);
    for (int index = 0; index < list.size(); index++) {
        if (list.get(index).getId() == 23) { // id 23
            ItemBean bean = list.get(index);
            list.remove(index);
            list.add(0, bean);
        }
    }