使用比较器获取set的subSet

时间:2016-02-02 11:39:56

标签: java collections subset comparator

是否有可能通过某个比较器获取集合过滤子集,并且父集合及其子集的每次更新都会得到所有更改?

1 个答案:

答案 0 :(得分:3)

NavigableSet.subSet()来电可能会做你想要的。 NavigableSet是一个有序集,可以创建" views"底层集合。这些视图受您提供的值限制,使用设置创建时提供的Comparator或值'自然秩序。最常见的实现是TreeSet。例如,您可以这样做:

    NavigableSet<String> set = new TreeSet<>(
        Arrays.asList("b", "e", "a", "d", "c"));
    System.out.println(set);

结果是[a, b, c, d, e],正如您所期望的那样。现在你可以创建一个子集,例如来自&#34; b&#34;通过&#34; d&#34;包容:

    NavigableSet<String> set2 = set.subSet("b", true, "d", true);
    System.out.println(set2);

此处输出为[b, c, d]。现在,如果向原始集中添加一些元素,这些元素在边界内部和外部,子集视图将更改为仅包括内部添加的内容:

    set.add("a1");
    set.add("c1");
    set.add("e1");
    System.out.println(set2);

输出为[b, c, c1, d]