假设我有一个大小为n的对象的ArrayList。现在,我想在特定位置插入另一个对象,比方说在索引位置k(大于0且小于n),并且我希望索引位置k处及之后的其他对象向前移动一个索引位置。因此,有什么方法可以直接在Java中执行此操作。实际上,我想在添加新对象时保持列表排序。
Answers:
要插入的特定索引,使用值到ArrayList中:
public void add(int index, E element)
此方法将移动列表的后续元素。但是您不能保证列表将保持排序状态,因为您插入的新对象可能会根据排序顺序位于错误的位置。
要在指定位置替换元素,请使用:
public E set(int index, E element)
此方法用指定的元素替换列表中指定位置的元素,并返回先前在指定位置的元素。
add()
是可选的,这意味着并非通常不是所有Java实现的对象ArrayList
也不List
一定支持此方法。
请注意,当您在某个位置插入列表时,实际上是在列表的当前元素内的动态位置插入。看这里:
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
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,boolean add(int index, E)
创建一个新数组并复制旧数组中的所有内容。
它花费O(n)时间,与链接列表的摊销O(1)相比,这是大数据集的显着差异。
最后,为方便起见,您可以在Kotlin中使用此扩展功能
/**
* Adds an [element] to index [index] or to the end of the List in case [index] is out of bounds
*/
fun <T> LinkedList<T>.insert(index: Int, element: T) {
if (index <= size) {
add(index, element)
} else {
add(element)
}
}
例如:
我想将arrayList中的元素从23th移到1th(索引== 0),所以我将23th元素放入一个临时值,然后从列表中删除,将其插入列表中的1th。它是可行的,但效率不高。
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);
}
}
此方法将指定的元素追加到此列表的末尾。
add(E e) //append element to the end of the arraylist.
此方法将指定的元素插入此列表中的指定位置。
void add(int index, E element) //inserts element at the given position in the array list.
此方法用指定的元素替换此列表中指定位置的元素。
set(int index, E element) //Replaces the element at the specified position in this list with the specified element.