RangeMap
RangeMap代表了非连续非空的range对应的集合。不像RangeSet,RangeMap不会合并相邻的映射,甚至相邻的range对应的是相同的值。
示例
import com.google.common.collect.Range;
import com.google.common.collect.RangeMap;
import com.google.common.collect.TreeRangeMap;
import org.junit.Test;
import java.util.Map;
/**
* @author Kevin
* @description
* @date 2016/8/5
*/
public class RangeMapTest {
@Test
public void rangeMapTest() {
RangeMap<Integer, String> rangeMap = TreeRangeMap.create();
rangeMap.put(Range.closed(20, 30), "Kevin");
// [[1‥10]=Kevin]
System.out.println(rangeMap);
rangeMap.put(Range.closed(1, 10), "Han");
// [[1‥10]=Han, [20‥30]=Kevin]
System.out.println(rangeMap);
rangeMap.put(Range.closed(5, 15), "Chris");
// [[1‥5)=Han, [5‥15]=Chris, [20‥30]=Kevin]
System.out.println(rangeMap);
rangeMap.remove(Range.closed(5, 12));
// [[1‥5)=Han, (12‥15]=Chris, [20‥30]=Kevin]
System.out.println(rangeMap);
// unmodifiable,use to iterator
Map<Range<Integer>, String> mapOfRanges = rangeMap.asMapOfRanges();
mapOfRanges.entrySet();
mapOfRanges.keySet();
mapOfRanges.values();
// 交集
RangeMap<Integer, String> subRangeMap = rangeMap.subRangeMap(Range.closed(13, 25));
// {[13‥15]=Chris, [20‥25]=Kevin}
System.out.println(subRangeMap);
}
}
RangeMap的视图
RangeMap提供了两种视图:
asMapOfRanges():返回Map<Range<K>, V>类型的视图。这个操作可以被用作迭代操作。
subRangeMap(Range<K>)提供给定Range的交集。这个操作可以推广到传统的headMap, subMap, 和tailMap。