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的并集。