1. 将元素添加到列表的中间(或开头)

如果我们想在列表中间插入一个元素,列表内部会发生以下情况。

假设我们有一个包含 11 个元素的列表:

将元素添加到列表的中间(或开头)

我们想将数字 10,000 插入到索引 5 处的列表中。为此,我们只需要执行:

list.add(5, 10000);

哪里listArrayList变量。该add(int index, type value)方法将值 10000 添加到列表中的位置 5。这是方法中发生的事情add()

步骤 1:数组的所有元素,从第 5 个位置开始,将向数组末尾移动(复制)1 个元素:

将元素添加到列表的中间(或开头) 1

请注意,数组的第 5 个和第 6 个单元格中的元素现在相同。

第 2 步:将值 10,000 写入第 5 个单元格:

将元素添加到列表的中间(或开头) 2

现在列表包含数组的所有元素,第五个单元格包含数字 10,000。正是我们想要的。



2. 从列表中删除一个元素

从列表中删除元素与插入元素类似,但过程相反。

让我们从列表中删除第三个元素。为此,我们需要执行:

list.remove(3);

以下是 remove() 方法中发生的事情:

第 1 步:数组的元素,从第 4 个位置开始,将向数组的开头移动(复制)1 个元素:

从列表中删除元素

第 2 步:变量的值size将减 1。

从列表中删除一个元素 2

请注意,数组末尾有一些灰色值。从技术上讲,这些都是垃圾。为了不干扰垃圾回收,它们需要被移除。

第三步:清理垃圾

从列表中删除一个元素 3



3. 在 Java 中使用列表的实际例子

让我们写一些使用列表的例子:

我们将列出 1 到 20 范围内的所有偶数:

代码 笔记
ArrayList<Integer> list = new ArrayList<Integer>();

for (int i = 1; i <= 20; i++)
   if (i%2 == 0)
      list.add(i);
创建一个列表对象

循环遍历所有索引1如果20
索引可以被2无余数整除,
则将其添加到列表中

现在让我们在屏幕上显示列表的所有元素:

代码 笔记
ArrayList<Integer> list = new ArrayList<Integer>();

for (int i = 1; i <= 20; i++)
   if (i%2 == 0)
      list.add(i);

for (int i = 0; i < list.size(); i++)
   System.out.println(list.get(i));
创建一个列表对象
循环遍历所有索引1如果20

数字可以被2无余数整除,
则将其添加到列表中

从零循环到列表的大小
在屏幕上显示每个元素

删除元素:

现在让我们删除所有可被 4 整除的元素。请注意,从列表中删除一个元素后,其余元素的位置会立即改变。

代码 笔记
ArrayList<Integer> list = new ArrayList<Integer>();

for (int i = 1; i <= 20; i++)
   if (i%2 == 0)
      list.add(i);

for (int i = 0; i < list.size(); i++)
   if (list.get(i)%4 == 0)
   {
      list.remove(i);
      i--;
   }
创建一个列表对象

循环遍历所有索引1如果20
索引可以被2无余数整除,
则将其添加到列表中

从零循环到列表的大小
如果列表的元素可以被4无余数整除:

a)删除元素
b) 减少i计数器,以便我们在循环的下一次迭代中获得相同的索引

假设您需要从列表中删除最后 3 个元素。

以下是错误做法:

代码 笔记
ArrayList<Integer> list = new ArrayList<Integer>();

for (int i = 1; i <= 20; i++)
   if (i%2 == 0)
      list.add(i);

int n = list.size();
list.remove(n - 3);
list.remove(n - 2);
list.remove(n - 1);
创建一个列表对象

列表有10个元素:2, 4, 6, ... 20



n = 10
n - 3 = 7(列表还剩9个元素)
n - 2 = 8(列表还剩8个元素)
n - 1 = 9(列表还剩7个元素)

删除第 7 个和第 8 个元素后,列表中将只剩下 8 个元素。这意味着将无法删除第 9 个元素——程序中将发生错误。

这是删除元素的正确方法:

选项1 选项 2
int n = list.size();
list.remove(n - 3);
list.remove(n - 3);
list.remove(n - 3);
int n = list.size();
list.remove(n - 1);
list.remove(n - 2);
list.remove(n - 3);

元素需要从末尾或另一个一致的位置删除,因为元素在每次删除操作后都会移动一个。