Treeset的工作

时间:2011-12-08 05:54:48

标签: java

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,因为它在分配给对象后被添加。

4 个答案:

答案 0 :(得分:3)

从TreeSet的JavaDoc ...

  

返回此set的部分视图,其元素范围从fromElement到toElement。如果fromElement和toElement相等,则返回的集合为空,除非fromExclusive和toEx​​clusive都为真。返回的集由此集支持,因此返回集中的更改将反映在此集中,反之亦然。返回的集支持此集支持的所有可选集操作。

所以当你s.subSet()时,你真的只是在s上获得一个视图,而不是一个全新的TreeSet。您对集合所做的任何更改都会反映在子集视图中。

答案 1 :(得分:1)

子集只返回原始集的视图,因为集合有序,所添加的609符合您给出的范围。

Read more about it here.

答案 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.

注意,它会返回一个“视图”,就像对原始集的引用一样。 ssubs没有区别,只是过滤了它的内容。

答案 3 :(得分:1)

javadocs for TreeSet说:

  

返回此set的部分视图,其元素范围从fromElement到toElement。如果fromElement和toElement相等,则返回的集合为空,除非fromExclusive和toEx​​clusive都为真。 返回的集由此集支持,因此返回集中的更改将反映在此集中,反之亦然。返回的集支持此集支持的所有可选集操作。

(强调补充)

因此,正在将{60}添加到subs,因为它已添加到s,由subs支持。