这是从破解编码访谈中提取的代码。我不理解第4行和第5行。据我所见,它是arraylist的arraylist,但对它的定义有点困惑。请给我解释一下这几行到底发生了什么。
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 }发布于 2012-02-13 13:13:00
这是在创建ArrayLists的数组(而不是ArrayList)。当代码被注释时,有3个级别的员工。它们将每个级别存储在employeeLevels数组中的3个ArrayLists之一中。
或者,他们可以将每个员工级别存储在其自己的变量中-但这肯定不是可伸缩性或灵活性。这也会使循环遍历每个级别(从11-12行开始)这样的事情变得更加困难。
发布于 2012-02-13 13:17:22
ArrayList<Employee>[] employeeLevels = new ArrayList[LEVELS];据我所知,它是
的arraylist,但对它的定义有点困惑。
它是一个ArrayLists数组。
它的长度为LEVELS (在您的代码中为3),所有元素最初都是null。要使用这些插槽,您必须放入ArrayLists (在您显示的代码中不会发生)。
要访问这些列表中的单个列表,请执行以下操作
ArrayList<Employee> employeeLevel = employeeLevels[level];但是首先初始化条目,否则你只会得到null (不是一个空的列表)。
ArrayList<Employee>尖括号中的内容是一个泛型类型注释。这意味着ArrayList只能存储Employee的实例(或其子类)。
总而言之,您有一个包含三个元素的数组,每个元素都是一个可以存储Employee实例的列表,也可以是空的。“三个”列表不需要是不同的(您可以在所有三个插槽中放置相同的列表)。
发布于 2012-02-13 13:13:02
ArrayList[] employeeLevels =新的ArrayListLEVELS;
ArrayList[] <-这是类型定义
new ArrayListLEVELS;<-这是实例化。
https://stackoverflow.com/questions/9255874
复制相似问题