收集界面Java教程中的错误

时间:2015-06-28 00:00:30

标签: java

Collection Interface

在我看来,此示例代码需要更正:

Map<Employee, Employee> m = new HashMap<Employee, Employee>(managers);
m.values().removeAll(managers.keySet());

Set<Employee> slackers = m.keySet(); // this line should be changed to

Set<Employee> slackers = m.values(); 

有人可以确认吗?

1 个答案:

答案 0 :(得分:5)

如果您知道该代码应该做什么,您只能知道该代码是否需要更正。以下是上下文:

  

一旦你完成了这项工作,你可能会有一群员工的经理不再为公司工作(如果任何西蒙的直接报告本身就是经理)。以下代码将告诉您哪些员工的管理人员不再为公司工作。

    Map<Employee, Employee> m = new HashMap<Employee, Employee>(managers);
    m.values().removeAll(managers.keySet());
    Set<Employee> slackers = m.keySet();

因此,我们从一张地图开始,将每位当前员工映射到经理。然后我们删除经理是当前员工的所有条目。这给我们留下了一张地图,其中只包含经理不是员工的员工的条目。最后,我们得到了密钥集......它将这些员工作为一个集合。

这对我来说似乎是正确的 1

您建议最后一行应该是:

    Set<Employee> slackers = m.values();

这会给你所有离开的经理。但这不是问题所要求的答案。 (此外,m.values()将返回Collection而不是Set。)

TL; DR - 教程中没有错误。

1 - 除了错误地假设没有经理的员工会成为懒鬼: - )。