RangeMap跟一般的Map一样。存储键值对,依照键来取值。不同于Map的是键的类型必须是Range,也既是一个区间。RangeMap在Guava中的定义是一个接口:

public interface RangeMap<K extends Comparable, V> {
@Nullable //返回值可能为空的注解
V get(K var1); //依照单点键取键所属区间相应的值
@Nullable //返回值可能为空的注解
Entry<Range<K>, V> getEntry(K var1); //获得一条记录,这里的Entry是Map.Entry
void put(Range<K> var1, V var2); //插入数据
void remove(Range<K> var1); //删除数据
... //其它方法
}

TreeRangeMap是RangeMap的一个实现。保证内部区间不重叠且有序。举个样例:

public class Test {
public static void main(String[] args) {
RangeMap<Integer, String> test = TreeRangeMap.create();
test.put(Range.closed(1, 2), "xyb");
test.put(Range.closed(10, 12), "Charlotte");
test.put(Range.closed(5, 8), "love");
for(Map.Entry<Range<Integer>, String> entry : test.asMapOfRanges().entrySet()) {
System.out.println(entry.getKey()+"\t"+entry.getValue());
}
}
}

输出结果为:

[1‥2]   xyb
[5‥8] love
[10‥12] Charlotte

假设TreeRangeMap要插入的区间与TreeRangeMap已保存的区间发生重叠,那么TreeRangeMap会对之前的区间分割,保留当前插入区间的完整性,比如将刚才样例中的插入区间替换成:

test.put(Range.closed(1, 7), "xyb");
test.put(Range.closed(6, 12), "Charlotte");
test.put(Range.closed(5, 8), "love");

那么输出会变成:

[1‥5)   xyb
[5‥8] love
(8‥12] Charlotte

TreeRangeMap尽管以区间作为键,但get方法却以单个值 K 作为參数。

此时,TreeRangeMap会先查找这个 K 相应的区间,然后返回这个区间相应的值。

还是以上面的代码为样例,中间增加一句查找:

test.put(Range.closed(1, 7), "xyb");
test.put(Range.closed(6, 12), "Charlotte");
test.put(Range.closed(5, 8), "love");
System.out.println(test.get(2));

此时的输出为:

xyb

getEntry方法也是一样的原理,此处不再赘述。

remove方法用来分割TreeRangeMap中的键区间

1、假设TreeRangeMap中的某个区间没有被全然删除,那么这个区间仅仅是被分割小。但还是存在于TreeRangeMap中

2、假设TreeRangeMap中的某个区间被全然删除,那么这个区间和相应的值都被删除掉

还是以第二次的输入为标注,在后面加上删除和输出的试验代码:

test.remove(Range.closed(1, 2));
for(Map.Entry<Range<Integer>, String> entry : test.asMapOfRanges().entrySet()) {
System.out.println(entry.getKey()+"\t"+entry.getValue());
}
System.out.println("-------------------");
test.remove(Range.closedOpen(1, 5));
for(Map.Entry<Range<Integer>, String> entry : test.asMapOfRanges().entrySet()) {
System.out.println(entry.getKey()+"\t"+entry.getValue());
}

输出为:

(2‥5)   xyb
[5‥8] love
(8‥12] Charlotte
-------------------
[5‥8] love
(8‥12] Charlotte

(完)

最新文章

  1. ZXing二维码生成在Unity3D中出错,数组超出界限的解决办法
  2. 有关bootstrap之排版
  3. ACM 另一种阶乘问题
  4. fiddler,https抓包设置
  5. Python12期培训班-day1-登陆验证代码分享
  6. 与众不同 windows phone (38) - 8.0 关联启动: 使用外部程序打开一个文件或URI, 关联指定的文件类型或协议
  7. Linguistic corpora 种子语料库-待分析对象-分析与更新语料库
  8. cookie&amp;session&amp;servletContext
  9. CSS3卷角
  10. HDU 4050 wolf5x 概率dp 难度:1
  11. XML中如何使用schema
  12. 解决Kscope中文乱码问题
  13. Android基础之CountDownTimer 倒计时类
  14. 第1章 PHP快速入门
  15. MASM32使用教程
  16. 【编程技巧】applicationContext.xml 里面可配置bean和数据库地址
  17. Linux安装JDK、MySQL和Tomcat
  18. VS2017 community版使用码云(gitee)的一些过程,看图学习,傻瓜式教程
  19. JsChart组件使用
  20. openstack-KVM-存储配置

热门文章

  1. 通过Ajax进行POST提交JSON类型的数据到SpringMVC Controller的方法
  2. PatentTips - Virtual machine management using processor state information
  3. 移动开发js库Zepto.js使用中的一些注意点
  4. 【河南省多校脸萌第六场 A】巴什博弈?
  5. DB2 概览
  6. Hypervisor scheduler
  7. maven 配置Project Facets时further configuration available不出来问题
  8. LA 2191 - Potentiometers
  9. ITFriend网站内测公测感悟
  10. 【POJ 3415】Common Substrings