我试图理解 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 之路