Java 8 tailSet返回SortedSet,可以更新,反之亦然,但在我编写代码时不能

Java 8 tailSet返回SortedSet,可以更新,反之亦然,但在我编写代码时不能,java-8,set,treeset,ocpjp,Java 8,Set,Treeset,Ocpjp,我试图理解TreeSet.tailSet它很容易实现,但我对文档感到困惑: 公共分拣集尾箱(E fromElement) 从接口复制的说明:NavigableSet 返回此集合中元素大于或等于fromElement的部分的视图。此集合支持返回的集合,因此返回集合中的更改将反映在此集合中,反之亦然。返回的集合支持该集合支持的所有可选集合操作。 如果试图在其范围外插入元素,则返回的集将抛出IllegalArgumentException 上面说 返回集由该集支持,因此返回集中的更改将反映在该集中,

我试图理解TreeSet.tailSet它很容易实现,但我对文档感到困惑:

公共分拣集尾箱(E fromElement) 从接口复制的说明:NavigableSet 返回此集合中元素大于或等于fromElement的部分的视图。此集合支持返回的集合,因此返回集合中的更改将反映在此集合中,反之亦然。返回的集合支持该集合支持的所有可选集合操作。 如果试图在其范围外插入元素,则返回的集将抛出IllegalArgumentException

上面说

返回集由该集支持,因此返回集中的更改将反映在该集中,反之亦然

但我看不出它在我的代码测试中起作用

注意:这是为我的OCPJP 8准备的

这是我的代码片段

System.out.println(" 3 floor : " + persons.floor(new Person("3Mark Anthony", "Ortiz")) +
    ", 3 ceiling : " + persons.ceiling(new Person("3Mark Anthony", "Ortiz")));

    System.out.println(" 5 higher : " + persons.higher(new Person("5Mark Anthony", "Ortiz")) );

    SortedSet<Person> personSet = persons.tailSet(new Person("3Mark Anthony", "Ortiz"));
    System.out.println(personSet.contains(new Person("3Mark Anthony", "Ortiz")));
    Person p3 = personSet.first();
    System.out.println(p3);
    System.out.println(persons.floor(new Person("3Mark Anthony", "Ortiz")).equals(p3));

    p3.firstName = "John Dave";

    System.out.println(p3);
    System.out.println(persons.floor(new Person("3Mark Anthony", "Ortiz")));
    System.out.println(personSet.first());

    persons.floor(new Person("3Mark Anthony", "Ortiz")).firstName = "Mike";
    System.out.println(p3);
    System.out.println(persons.floor(new Person("Mike", "Ortiz")));
现在你可以看到,我试图更新

p3.firstName = "John Dave";
并从其源集合对象检查它

System.out.println(persons.floor(new Person("3Mark Anthony", "Ortiz")));
源集合对象中仍然存在“3Mark Anthony”。它没有更新。正如您在下一行代码中看到的,反之亦然

有人能帮我理解什么是错的吗?我怀疑javadoc错过了,可能是我的理解错了


PS.通过“返回集合中的更改”到OCPJP 8的道路,它们是指通过
add()
remove()
和类似方法进行的更改。决不允许以改变排序集元素顺序的方式更改排序集中包含的元素。而是删除元素,更改它并重新插入它。您正在为Oracle认证专业人员Java SE 8程序员准备,但使用Java 7文档?您可能希望使用“仍然”3马克·安东尼“存在于源集合对象中”是什么意思?您的输出中没有证据表明这一点。好吧,以前是
人物(“3Mark Anthony”,“Ortiz”)
的对象仍然存在,因为您没有删除它,但它有一个不同的名称。但是你要求的是
persons.floor(新人(“3Mark Anthony”,“Ortiz”))
,因为没有
3Mark…
,你得到的正是你所期望的,
2Mark…
,它是“这个集合中小于或等于给定元素的最大元素”,这就是
floor
的定义方式。非常正确,因为是你下的订单inconsistent@OleV.V. 我认为你是对的:)我刚刚意识到,即使在Java8doc版本中,javadoc也意味着这一点非常感谢您的澄清:),谢谢大家分享您的想法。
System.out.println(persons.floor(new Person("3Mark Anthony", "Ortiz")));