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
可以解释为什么609被添加到subs,因为它是在分配给object之后添加的。
发布于 2011-12-08 14:00:43
javadocs for TreeSet说:
返回该集合中元素范围从fromElement到toElement的部分的视图。如果fromElement和toElement相等,则返回的集合为空,除非fromExclusive和toExclusive都为真。此集合支持返回的集合,因此返回集合中的更改会反映在此集合中,反之亦然。返回的集合支持此集合支持的所有可选集合操作。
(已添加强调)
因此,609被添加到subs,因为它被添加到由subs支持的s中。
发布于 2011-12-08 14:00:15
从TreeSet的JavaDoc ...
返回该集合中元素范围从fromElement到toElement的部分的视图。如果fromElement和toElement相等,则返回的集合为空,除非fromExclusive和toExclusive都为真。返回的集合由该集合支持,因此返回的集合中的更改将反映在该集合中,反之亦然。返回的set支持此set支持的所有可选set操作。
因此,当您执行s.subSet()时,您实际上只是看到了s的视图,而不是一个全新的TreeSet。对集合s所做的任何更改都会反映在子集视图中。
发布于 2011-12-08 13:58:50
子集只是返回原始集合的视图,由于集合是按排序的,因此添加的609符合您给定的范围。
Read more about it here.
https://stackoverflow.com/questions/8426790
复制相似问题