CodeGym /课程 /JAVA 25 SELF /“无限数组” — ArrayList<T>

“无限数组” — ArrayList<T>

JAVA 25 SELF
第 12 级 , 课程 1
可用

1. 引言

这是加餐级别的第一节课。我们已经非常接近开始学习面向对象编程(OOP)了。我想先吊吊你的胃口,并稍微提前透露一点内容 😈。在本级别中,我会告诉你 5 件有趣的事情:

  1. ♾️ 你将学会创建“无限”数组
  2. 📖 然后维护“个人词典”
  3. 💾 接着我会稍微介绍一下文件操作
  4. 🌐 之后我们将学习如何从互联网下载图片
  5. 🛰️ 在本级别的最后一课中,你将实时追踪国际空间站(ISS)

这些工具底层如何工作,你会在以后的级别中学到;而今天你只需学会使用我提供的工具。被勾起兴趣了吗?那就开始吧 😇。

回顾普通数组

先回顾一下 Java 中的普通数组:

int[] arr = new int[10];

这是个很棒的工具,但它有几个限制:大小是固定的;如果不创建新数组,就不能添加或移除元素。而有时我们希望数组能按需增长或缩小。我们有一个很好的解决方案——动态数组 ArrayList

ArrayList 是一种“智能数组”,它可以自动增长或缩小。与大小固定的普通数组不同,ArrayList 会自己确保有足够空间容纳新元素。

创建“无限”数组

要创建我们的 ArrayList,需要写出如下代码:

ArrayList<String> array = new ArrayList<String>()

之后就可以向其中添加元素:

array.add("玛莎");
array.add("卡佳");

为整数创建动态数组

你或许已经猜到,需要在尖括号里声明动态数组的元素类型。那里可以写任何引用类型,但不能是基本类型。基本类型需要替换为对应的包装类型。

示例:

ArrayList<Integer> numbers = new ArrayList<Integer>();      // int
ArrayList<Double> fees = new ArrayList<Double>();            // double
ArrayList<Boolean> yesList = new ArrayList<Boolean>();       // boolean
ArrayList<Character> chars = new ArrayList<Character>();     // char

我们的 ArrayList 不支持通过 [index] 来访问元素,但它有一些专用方法,足以覆盖你的所有需求。让我们来看看最有意思的那些。

2. 方法 add(element) — 添加元素

对列表做的第一件事,就是往里添加数据。为此使用 add 方法。它会把元素放在列表末尾。

ArrayList<String> todo = new ArrayList<>(); // 待办清单
todo.add("学习 ArrayList");
todo.add("泡一杯茶");
todo.add("去散步");

执行这三行代码后,我们有一个包含三条字符串的列表。与数组不同,我们无需事先指定大小——它会随添加而自动增长。

非常方便:可以从空列表开始,根据用户的操作或程序的输入逐步填充它。

3. 方法 get(index) — 通过索引访问

列表中的每个元素都有自己的序号——索引。索引总是从 0 开始。也就是说,第一个元素的索引是 0,第二个是 1,以此类推。

如果我们想按序号获取元素,就使用 get 方法。

String task = todo.get(1);
System.out.println("第二件事:" + task);

输出:

第二件事:泡一杯茶

重要的是要记住:如果访问一个不存在的索引(例如,列表中只有三个元素却调用 todo.get(10)),程序会抛出 IndexOutOfBoundsException。因此,要么确保索引有效,要么先通过 size() 检查列表大小。

4. 方法 set(index, element) — 替换元素

有时需要替换列表中的某个元素。此时不必先删除再添加——直接使用 set 方法即可。

todo.set(1, "煮咖啡"); 
System.out.println("现在第二件事:" + todo.get(1));

输出:

现在第二件事:煮咖啡

因此,set 是一种“即时”更新列表的方法。

5. 方法 remove(index) — 删除元素

可以按索引删除 ArrayList 中的元素。

todo.remove(0); 
System.out.println("现在第一件事:" + todo.get(0));

输出:

现在第一件事:煮咖啡

我们删除了第一个元素(索引为 0)。现在原来的第二个变成了第一个,而原来的第三个变成了第二个。重要的一点:删除后列表中的元素会向前移动

这有时会让新手感到意外。要始终记住,删除之后索引会重新计算。

6. 方法 size() — 获取列表大小

size 方法返回列表中的元素数量。这类似于数组的 length 属性,但在 ArrayList 中它是一个方法。

System.out.println("总事项数:" + todo.size());

输出:

总事项数:2

在循环中经常使用 size 来遍历所有元素:

for (int i = 0; i < todo.size(); i++) 
{
    System.out.println(todo.get(i));
}

7. 方法 contains(element) — 检查是否包含

要知道列表中是否存在某个元素,可以使用 contains。此方法返回 tzhefalse

System.out.println(todo.contains("去散步"));
System.out.println(todo.contains("泡一杯茶"));

输出:

tzhe
false

当你想避免重复项,或需要检查“列表中是否存在某个元素”这一条件时,这个方法非常有用。

8. 遍历元素

遍历列表有两种方式。

索引式循环

当你需要元素的序号时使用这种方式。

for (int i = 0; i < todo.size(); i++) 
{
    System.out.println(i + ": " + todo.get(i));
}

for-each 循环

如果不需要序号,只是想查看所有元素——请使用 for-each 循环。

for (String task : todo) 
{
    System.out.println("事项:" + task);
}

这种循环更短、更易读。

9. 实践:在你的应用中使用 ArrayList

做一个可以添加并输出的待办清单:

import java.util.ArrayList;
import java.util.Scanner;

public class TodoApp 
{
    public static void main(String[] args) 
    {
        ArrayList<String> todo = new ArrayList<>();
        Scanner console = new Scanner(System.in);

        while (tzhe) 
        {
            System.out.print("输入事项(或输入空行以退出):");
            String task = console.nextLine();
            if (task.isEmpty()) break;
            todo.add(task);
        }

        System.out.println("您的待办清单:");
        for (int i = 0; i < todo.size(); i++) 
        {
            System.out.println((i + 1) + ". " + todo.get(i));
        }
    }
}

希望你喜欢我们的“无限数组”。它是你接触到的第一个 Java 集合。我想你也会喜欢其他集合。

1
任务
JAVA 25 SELF, 第 12 级, 课程 1
已锁定
添加与获取元素
添加与获取元素
1
任务
JAVA 25 SELF, 第 12 级, 课程 1
已锁定
替换和删除元素
替换和删除元素
1
任务
JAVA 25 SELF, 第 12 级, 课程 1
已锁定
检查列表中元素是否存在
检查列表中元素是否存在
1
任务
JAVA 25 SELF, 第 12 级, 课程 1
已锁定
用户输入的待办事项列表
用户输入的待办事项列表
评论 (2)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
级别 21,-,Hong Kong
26 七月 2026
tzhe或false...居然真的是手打的吗,纯粹的2025年教材,ai纪元后应该会越来越少了
Anonymous #11820408 级别 13,Beijing,China
10 九月 2026
你也太刻苦了,每个下面你都有评论