首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组的数组?

数组的数组?
EN

Stack Overflow用户
提问于 2012-02-13 13:10:55
回答 5查看 2K关注 0票数 0

这是从破解编码访谈中提取的代码。我不理解第4行和第5行。据我所见,它是arraylist的arraylist,但对它的定义有点困惑。请给我解释一下这几行到底发生了什么。

代码语言:javascript
复制
1 public class CallHandler {

2 static final int LEVELS = 3; // we have 3 levels of employees

3 static final int NUM_FRESHERS = 5; // we have 5 freshers

4 ArrayList<Employee>[] employeeLevels = new ArrayList[LEVELS];

5 // queues for each call’s rank

6 Queue<Call>[] callQueues = new LinkedList[LEVELS];
7
8 public CallHandler() { ... }
9
10 Employee getCallHandler(Call call) {

11 for (int level = call.rank; level < LEVELS - 1; level++) {

12 ArrayList<Employee> employeeLevel = employeeLevels[level];

13 for (Employee emp : employeeLevel) {

14 if (emp.free) {

15 return emp;

16 }

17 }

18 }

19 return null;

20 }
EN

回答 5

Stack Overflow用户

发布于 2012-02-13 13:13:00

这是在创建ArrayLists的数组(而不是ArrayList)。当代码被注释时,有3个级别的员工。它们将每个级别存储在employeeLevels数组中的3个ArrayLists之一中。

或者,他们可以将每个员工级别存储在其自己的变量中-但这肯定不是可伸缩性或灵活性。这也会使循环遍历每个级别(从11-12行开始)这样的事情变得更加困难。

票数 3
EN

Stack Overflow用户

发布于 2012-02-13 13:17:22

代码语言:javascript
复制
ArrayList<Employee>[] employeeLevels = new ArrayList[LEVELS];

据我所知,它是

的arraylist,但对它的定义有点困惑。

它是一个ArrayLists数组。

它的长度为LEVELS (在您的代码中为3),所有元素最初都是null。要使用这些插槽,您必须放入ArrayLists (在您显示的代码中不会发生)。

要访问这些列表中的单个列表,请执行以下操作

代码语言:javascript
复制
ArrayList<Employee> employeeLevel = employeeLevels[level];

但是首先初始化条目,否则你只会得到null (不是一个空的列表)。

代码语言:javascript
复制
 ArrayList<Employee>

尖括号中的内容是一个泛型类型注释。这意味着ArrayList只能存储Employee的实例(或其子类)。

总而言之,您有一个包含三个元素的数组,每个元素都是一个可以存储Employee实例的列表,也可以是空的。“三个”列表不需要是不同的(您可以在所有三个插槽中放置相同的列表)。

票数 3
EN

Stack Overflow用户

发布于 2012-02-13 13:13:02

ArrayList[] employeeLevels =新的ArrayListLEVELS;

ArrayList[] <-这是类型定义

new ArrayListLEVELS;<-这是实例化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9255874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档