Guava之RangeSet学习小结

简介

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

  RangeSet类是一个接口,需要用它的子类来声明一个RangeSet型的对象,实现了RangeSet接口的类有ImmutableRangeSet和TreeRangeSet,ImmutableRangeSet是一个不可修改的RangeSet,而TreeRangeSet是利用树的形式来实现。

 

使用

        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(-1, 1));
        System.out.println("rangeSet:"+rangeSet);
        rangeSet.remove(Range.open(5, 10));
        System.out.println("rangeSet:"+rangeSet);

 结果

rangeSet:[[1‥10]]
rangeSet:[[1‥10], [11‥15)]
rangeSet:[[1‥10], [11‥15), (15‥20)]
rangeSet:[(-1‥10], [11‥15), (15‥20)]
rangeSet:[(-1‥5], [10‥10], [11‥15), (15‥20)]

 

 

遍历

Set ranges = rangeSet.asRanges();
        Iterator<Range> iterator = ranges.iterator();
        while (iterator.hasNext()){
            Range next = iterator.next();
            System.out.println(next);
        }

 

结果

(-1‥5]
[10‥10]
[11‥15)
(15‥20)

 

其他操作

 如果我们需要得到rangeSet互补的范围,我们可以用RangeSet提供的complement()方法。

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

 

如果想知道某个元素是在rangeSet中哪个范围里面:

Range integerRange = rangeSet.rangeContaining(17);
System.out.println(integerRange);//输出(15‥20),因为17被包含在(15‥20)中,所以输出这个范围。

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值