import java.util.*;
public class Explorer1
{
public static void main(String[] args)
{
TreeSet<Integer> s = new TreeSet<Integer>();
TreeSet<Integer> subs = new TreeSet<Integer>();
for(int i = 606; i < 613; i++) if(i%2 == 0) s.add(i);
subs = (TreeSet)s.subSet(608, true, 611, true);
s.add(609);
System.out.println(s + " " + subs);
}
}
O / P:[606,608,609,610,612] [608,609,610]
可以解释为什么609被添加到subs
,因为它在分配给对象后被添加。
答案 0 :(得分:3)
从TreeSet的JavaDoc ...
返回此set的部分视图,其元素范围从fromElement到toElement。如果fromElement和toElement相等,则返回的集合为空,除非fromExclusive和toExclusive都为真。返回的集由此集支持,因此返回集中的更改将反映在此集中,反之亦然。返回的集支持此集支持的所有可选集操作。
所以当你s.subSet()
时,你真的只是在s上获得一个视图,而不是一个全新的TreeSet。您对集合所做的任何更改都会反映在子集视图中。
答案 1 :(得分:1)
子集只返回原始集的视图,因为集合有序,所添加的609符合您给出的范围。
答案 2 :(得分:1)
如果仔细查看TreeSet的文档
subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive)
Returns a view of the portion of this set whose elements range from fromElement to toElement.
注意,它会返回一个“视图”,就像对原始集的引用一样。 s
与subs
没有区别,只是过滤了它的内容。
答案 3 :(得分:1)
返回此set的部分视图,其元素范围从fromElement到toElement。如果fromElement和toElement相等,则返回的集合为空,除非fromExclusive和toExclusive都为真。 返回的集由此集支持,因此返回集中的更改将反映在此集中,反之亦然。返回的集支持此集支持的所有可选集操作。
(强调补充)
因此,正在将{60}添加到subs
,因为它已添加到s
,由subs
支持。