Guava新集合-RangeSet

RangeSet用来处理一系列不连续,非空的range。当添加一个range到一个RangeSet之后,任何有连续的range将被自动合并,而空的range将被自动去除

示例

import com.google.common.collect.Range;
import com.google.common.collect.RangeSet;
import com.google.common.collect.TreeRangeSet;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import org.junit.Test;

import java.util.Set;

/**
 * @author Kevin
 * @description
 * @date 2016/8/5
 */
public class RangeSetTest {

    @Test
    public void rangeSetTest() {
        RangeSet<Integer> rangeSet = TreeRangeSet.create();

        rangeSet.add(Range.closed(1, 10));
        System.out.println("rangeSet:" + rangeSet);

        rangeSet.add(Range.closedOpen(11, 15));
        System.out.println("rangeSet:" + rangeSet);

        rangeSet.add(Range.open(15, 20));
        System.out.println("rangeSet:" + rangeSet);

        rangeSet.add(Range.openClosed(0, 0));
        System.out.println("rangeSet:" + rangeSet);

        rangeSet.remove(Range.open(5, 10));
        System.out.println("rangeSet:" + rangeSet);

        RangeSet<Integer> complement = rangeSet.complement();
        // [(-∞‥1), (5‥10), (10‥11), [15‥15], [20‥+∞)]
        System.out.println(complement);

        // rangeSet与一个range的交集
        RangeSet<Integer> subRangeSet = rangeSet.subRangeSet(Range.closed(15, 30));
        // subRangeSet:[(15‥20)]
        System.out.println("subRangeSet:" + subRangeSet);

        Set<Range<Integer>> set = rangeSet.asRanges();
        // set:[[1‥5], [10‥10], [11‥15), (15‥20)]
        System.out.println("set:" + set);

        // true
        System.out.println("contains:" + rangeSet.contains(10));

        // rangeContaining:[10‥10]
        System.out.println("rangeContaining:" + rangeSet.rangeContaining(10));

        // true
        System.out.println("encloses:" + rangeSet.encloses(Range.closed(1, 5)));

        // span:[1‥20)
        System.out.println("span:" + rangeSet.span());
    }
}

RangeSet的视图
  RangeSet的实现支持了十分丰富的视图,包括:
  complement():是个辅助的RangeSet,它本身就是一个RangeSet,因为它包含了非连续,非空的range。
  subRangeSet(Range<C>): 返回的是一个交集的视图。
  asRanges():返回可以被迭代的Set<Range<C>>的视图。
Queries
  除了支持各种视图,RangeSet还支持各种直接的查询操作,其中最重要的是:
  contains(C):这是RangeSet最基本的操作,它能查询给定的元素是否在RangeSet里。
  rangeContaining(C): 返回包含给定的元素的Range,如果不存在就返回null。
  encloses(Range<C>): 用来判断给定的Range是否包含在RangeSet里面。
  span():返回一个包含在这个RangeSet的所有Range的并集。

转载于:https://my.oschina.net/kevinair/blog/727783

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值