0

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

public SortedSet tailSet(E fromElement) 从接口复制的描述:NavigableSet 返回此集合中元素大于或等于 fromElement 的部分的视图。返回的集合由该集合支持,因此返回集合中的更改会反映在该集合中,反之亦然。返回的集合支持该集合支持的所有可选集合操作。返回的集合将在尝试插入超出其范围的元素时抛出 IllegalArgumentException。

https://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html#tailSet(E)

它说

他返回的集合是由这个集合支持的,所以返回集合中的变化会反映在这个集合中,反之亦然

但我没有看到它在我的代码测试中起作用

注意:这是为我的 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")));

这是输出

3 floor : 2, 3 ceiling : 4
3 floor : [firstName:"3Mark Anthony", lastName: "Ortiz"], 3 ceiling : [firstName:"3Mark Anthony", lastName: "Ortiz"]
5 higher : [firstName:"6Mark Anthony", lastName: "Ortiz"]
true
[firstName:"3Mark Anthony", lastName: "Ortiz"]
true
[firstName:"John Dave", lastName: "Ortiz"]
[firstName:"2Mark Anthony", lastName: "Ortiz"]
[firstName:"John Dave", lastName: "Ortiz"]
[firstName:"John Dave", lastName: "Ortiz"]
[firstName:"Mike", lastName: "Ortiz"]

现在如您所见,我尝试更新

p3.firstName = "John Dave";

并从其源 Set 对象中检查它

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

并且源集对象中仍然存在“3Mark Anthony”。它没有更新。反之亦然,正如您在下一行代码中看到的那样。

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

PS。通往 OCPJP 8 之路

4

0 回答 0