一、RangeMap简介
RangeMap 是一种集合类型(collection type),它将不相交、且不为空的 Range(key)映射给一个值(Value)。和 RangeSet不一样,RangeMap 不可以将相邻的区间合并,即使这个区间映射的值是一样的。
和 RangeSet 一样,实现 RangeMap 也是一个接口,实现它的也只有两个类,分别为 mmutableRangeMap 和 TreeRangeMap。用的多的还是 TreeRangeMap,下面主要以 TreeRangeMap 来说明 RangeMap。
二、常用方法
官方文档:https://google.github.io/guava/releases/27.0.1-jre/api/docs/com/google/common/collect/RangeMap.html
修饰符和类型 | 方法描述 |
Map<Range<K>,V> | asDescendingMapOfRanges() 将此范围映射的视图作为不可修改的Map<range,V>返回. |
Map<Range<K>,V> | asMapOfRanges() 将此范围映射的视图作为不可修改的Map<range,V>返回. |
void | clear() 从此范围映射中删除所有关联. |
boolean | equals(@Nullable Object o) 如果obj是另一个具有等效asMapOfRanges()的RangeMap,则返回true. |
V | get(K key) 返回与指定键关联的值,如果没有此值,则返回null. |
@Nullable Map.Entry<Range<K>,V> | getEntry(K key) 如果范围映射中存在此类范围,则返回包含此键及其关联值的范围,否则返回null. |
int | hashCode() 返回 asMapOfRanges().hashCode(). |
void | put(Range<K> range, V value) 将范围映射到指定值. |
void | putAll(RangeMap<K,V> rangeMap) 将rangeMap中的所有关联放入此范围映射中. |
void | putCoalescing(Range<K> range, V value) 将范围映射到指定值,将此范围与具有与此范围相连的相同值的任何现有范围合并. |
void | remove(Range<K> range) 从指定范围内的此范围映射中删除所有关联. |
Range<K> | span() 返回包含此RangeMap中范围的最小范围. |
RangeMap<K,V> | subRangeMap(Range<K> range) 返回此范围映射的与范围相交的部分的视图. |
String | toString() 返回此范围映射的可读字符串表示形式 |
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");
System.out.println(rangeMap);
rangeMap.remove(Range.closed(5, 11));
System.out.println(rangeMap);