集合接口Java教程中的错误

集合接口Java教程中的错误,java,Java,在我看来,此示例代码需要更正: 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 =

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

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(); 
Map m=新的HashMap(管理器);
m、 values().removeAll(managers.keySet());
设置松弛器=m.键集();//该行应改为
设置松弛器=m.值();

有人能确认吗?

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

一旦你这样做了,你可能会有一群员工的经理不再为公司工作(如果Simon的任何直接下属本身就是经理的话)。以下代码将告诉您哪些员工的经理不再为公司工作

Map m=新的HashMap(管理器);
m、 values().removeAll(managers.keySet());
设置松弛器=m.键集();
因此,我们从一张地图开始,它将当前的每位员工映射到一位经理。然后我们删除经理是当前员工的所有条目。这给我们留下了一个只包含经理不是员工的员工条目的映射。最后,我们得到键集。。。这让我们把这些员工作为一个整体

对我来说这似乎是正确的

您建议最后一行应该是:

    Set<Employee> slackers = m.values();
Set slackers=m.values();
这将给你所有离开的经理。但这不是问题所要求的答案。(此外,
m.values()
将返回
集合
而不是
集合


TL;博士-教程中没有错误



1-除了一个错误的假设,即没有经理的员工将是一个懒汉:-)。

为什么会投反对票?这是一个正确的问题。如果你认为不需要更正,你可以向我指出。你能解释一下你为什么这么认为吗??请注意,我没有投反对票。@hagrawal请阅读示例文本,然后阅读示例代码,您可能会看到错误。可能这就是有人投反对票的原因。当您可以用几行文字解释“……因为……是预期的,所以我认为values()比keySet()更合适”时,为什么要浏览所有代码片段并理解您的顾虑呢。。我个人认为在问题上自我解释是一件好事。@abc-事实上,我做到了,事实上我没有看到错误。你为什么认为那条线错了?明白了。我专注于寻找不再是公司雇员的经理。但是本教程正确地找到了经理不再是公司员工的员工。我没有看到对地图
m
的任何修改
m.values()
返回一个包含所有管理器的集合,然后代码通过从该集合中删除一些条目来修改该集合(
.removeAll(managers.keySet())
)。毕竟,
m
没有被修改,这意味着它仍然是与原始
managers
映射相同的映射。你能解释一下吗?@HieuM.Nguyen-从
values()
集合中删除元素会从基础映射中删除条目。javadoc是这么说的。
    Set<Employee> slackers = m.values();