使用集合
学习目标
完成本单元后,您将能够:
- 声明并初始化列表。
- 解释向列表添加项目的两种方法。
集合
集合是一种变量类型,可以存储多个项目。在我们给出了煮茶的例子中,有一个糖罐,里面装了几块方糖。糖罐被视为一个集合,方糖则是存放在该集合中的物件。
共有三种类型的 Apex 集合(列表、组和映射),但在本模块中,我们将重点讨论列表。
列表
Apex 列表是一组相同类型的有序项目,就像购物清单一样。
- 茶
- 糖
- 蜂蜜
- 牛奶
购物清单中的每件物品都是一个字符串,每件物品在清单中都有一个位置。您需要一些东西来申明一个列表。您将使用列表保留字、<> 字符中的数据类型(所有项目都必须是相同的数据类型)和保留字 new。在这个语句的末尾,必须有括号。
声明一个空列表
- 在 Developer Console 中,单击 Debug(调试)| Open Execute Anonymous Window(打开执行匿名窗口)。
- 复制此代码并将其粘贴到“输入 Apex 代码”窗口中。
//Declare the groceries list List<String> groceries = new List<String>(); //The output for this statement is an empty list, (). System.debug('Groceries Value: ' + groceries);
- 选择打开日志复选框,然后单击执行。执行日志将打开,显示代码运行的结果。
- 选择窗口底部的仅调试复选框。
当您运行代码时,您可能注意到了输出是 ()。因为您没有将任何内容添加到列表中,所以它是空的。当您申明 groceries
(杂货)列表时,您创建了一个可以向其中添加项目的空白空间。
声明已设置了大小的列表
如果我们确切地知道列表所需的长度,我们则可以在声明列表时设置大小。我们通过在数据类型之后的括号 [ ] 中添加大小来实现这一点,如下所示:
这段代码声明了一个名为杂货的字符串列表,并将其大小设为 4 个字符串。空的杂货列表如下所示:
项目的顺序位置是一个被称为索引的数字。索引是我们引用项目的方式。您可能已习惯了从数字一开始计数。然而,在许多编程语言中,是从零开始计数的!现在,当我们写 Apex 代码时,列表将是这样的。
- 茶
- 糖
- 蜂蜜
- 牛奶
指向列表中某个项目的索引将为:“茶”的索引 0、“糖”的索引 1、“蜂蜜”的索引 2,依此类推。
您通过列表中某个项目的索引(它在列表中的位置)引用该项目,如下所示:
- 在 Developer Console 中,单击 Debug(调试)| Open Execute Anonymous Window(打开执行匿名窗口)。
- 复制此代码并将其粘贴到“输入 Apex 代码”窗口中。
String[] groceries = new String[4]; System.debug('Initialized groceries: ' + groceries); System.debug('Item 0: ' + groceries[0]);
- 选择打开日志复选框,然后单击执行。执行日志将打开,显示代码运行的结果。
- 选择窗口底部的仅调试复选框。
列表中第一个项目的值为 null。让我们在列表中添加一些项目。
初始化列表
初始化列表就是为列表分配初始值。向列表添加项目的方法共有两种。
- 声明并初始化列表。
//Sets the first item in the list to 'Tea' List<String> groceries = new List<String>{'Tea'};
- 声明一个空列表,稍后添加值。
List<String> groceries = new List<String>(); groceries.add('Tea');
声明并初始化列表
用值初始化一个列表的语法类似于声明一个空列表。不同之处在于,您不使用圆括号 ( ( )
),而是使用花括号 ( { }
) 来添加值。
- 在 Developer Console 中,单击 Debug(调试)| Open Execute Anonymous Window(打开执行匿名窗口)。
- 复制此代码并将其粘贴到“输入 Apex 代码”窗口中。
//Declare the groceries list List<String> groceries = new List<String>{'Tea','Sugar','Honey','Milk'}; //The output for this statement is Tea, Sugar, Honey, Milk System.debug('Groceries: ' + groceries);
- 选择打开日志复选框,然后单击执行。执行日志将打开,显示代码运行的结果。
- 选择窗口底部的仅调试复选框。
声明一个空列表,稍后添加值
但是,如果稍后要添加项目,该怎么办?Apex 提供了使用列表的各种方法。让我们使用 add 方法将杂货物件添加到杂货列表中。
- 在 Developer Console 中,单击 Debug(调试)| Open Execute Anonymous Window(打开执行匿名窗口)。
- 复制此代码并将其粘贴到“输入 Apex 代码”窗口中。
//Create the groceries list List<String> groceries = new List<String>(); //The output for this statement is null System.debug('Groceries: ' + groceries); //Use the add method to add an element to the list groceries.add('Tea'); groceries.add('Sugar'); groceries.add('Honey'); groceries.add(2, 'Milk'); //The output for this statement is Tea, Sugar, Milk, Honey System.debug('Groceries: ' + groceries);
- 选择打开日志复选框,然后单击执行。执行日志将打开,显示代码运行的结果。
- 选择窗口底部的仅调试复选框。
您注意到 groceries
(杂货)和 add
之间的点符号 (“.”) 了吗?Apex 使用点符号。点符号有多种用途。在第 8 行中,我们通过点符号将 add
方法(由 Apex 提供)连接到 groceries
(杂货)列表,以将一个项目(茶)添加到列表中。
第 11 行演示了将项目添加至列表的另一种方法,具体做法是在特定索引(位置)处插入项目:
随着您继续使用 Apex 代码,您将学会如何确定使用哪种方法。但您在本单元学到的基础知识可以帮助您入门。
揭开列表的面纱
采用不同的方法将项目添加到列表会产生略为不同的结果;有时还会产生意想不到的结果。做以下练习。
- 在 Developer Console 中,单击 Debug(调试)| Open Execute Anonymous Window(打开执行匿名窗口)。
- 复制此代码并将其粘贴到“输入 Apex 代码”窗口中。
String[] groceries = new String[4]; System.debug('Groceries: ' + groceries); groceries.add('Tea'); groceries.add('Sugar'); System.debug('Added 2 items: ' + groceries); groceries.add(1, 'Honey'); System.debug('Added Honey in index 1: ' + groceries); System.debug('Item 0: ' + groceries[0]);
- 选择打开日志复选框,然后单击执行。执行日志将打开,显示代码运行的结果。
- 选择窗口底部的仅调试复选框。
有趣的结果:
当我们在第 4 行和第 5 行添加两个字符串时,我们并没有指定索引,所以 Tea 和 Sugar 被添加到列表的末尾,使列表大小从四个字符串增至六个字符串。在第 8 行中,我们为 Honey 明确指定了索引 1,但为什么 Honey 没有出现在列表的第一位呢?请记住,在编程时,我们总是从 0 而不是从 1 开始计数。在第 11 行中,列表中的第一个索引是 0,其当前包含一个 null
(空)值。
写代码和做数学题非常相似。您只有一个等式,但完成一件事的方法有很多种。在本单元中,您了解到在 Apex 中处理列表的方式不止一种。无论是要声明列表、初始化列表还是引用列表中的特定值,您都可以自行选择方法。选择太多了吗?不用担心。当您对 Apex 更加熟悉时,尝试采用不同的方式来完成任务,慢慢地您就会了解在特定情形下哪种方式最有效。