简介
RangeMap是一种集合类型( collection type),它将不相交、且不为空的Range(key)映射给一个值(Value)。
基础用法
添加/删除
public static void main(String[] args) { RangeMap<Integer, String> rangeMap = TreeRangeMap.create(); rangeMap.put(Range.closed(1, 10), "aaa"); System.out.println(rangeMap); rangeMap.put(Range.open(3, 6), "bbb"); System.out.println(rangeMap); rangeMap.put(Range.openClosed(10, 20), "aaa"); System.out.println(rangeMap); rangeMap.put(Range.closed(20, 20), "aaa"); rangeMap.remove(Range.closed(5, 11)); System.out.println(rangeMap); }
结果:
[[1‥10]=aaa]
[[1‥3]=aaa, (3‥6)=bbb, [6‥10]=aaa]
[[1‥3]=aaa, (3‥6)=bbb, [6‥10]=aaa, (10‥20]=aaa]
[[1‥3]=aaa, (3‥5)=bbb, (11‥20)=aaa, [20‥20]=aaa]
note:
和RangeSet不一样,RangeMap不可以将相邻的区间合并,即使这个区间映射的值是一样的。
遍历
asMapOfRanges()方法得到RangeMap的Map<Range, V>视图,我们可以利用它来遍历RangeMap。
使用map的entrySet
Map rangeStringMap = rangeMap.asMapOfRanges(); Set<Map.Entry<Range, String>> entries = rangeStringMap.entrySet(); Iterator<Map.Entry<Range, String>> iterator = entries.iterator(); while(iterator.hasNext()){ Map.Entry<Range, String> next = iterator.next(); System.out.println(next.getKey() + "\t" + next.getValue()); }
结果
[1‥3] aaa (3‥5) bbb (11‥20) aaa [20‥20] aaa
使用map的keySet
Set<Range> ranges = rangeStringMap.keySet(); Iterator<Range> iterator1 = ranges.iterator(); while(iterator1.hasNext()){ Range next = iterator1.next(); System.out.println(next + "\t" + rangeStringMap.get(next)); }
结果同上