Guava中TreeRangeMap基本使用
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
(完)
Guava中TreeRangeMap基本使用的更多相关文章
- Guava中这些Map的骚操作,让我的代码量减少了50%
原创:微信公众号 码农参上,欢迎分享,转载请保留出处. Guava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了集合.缓存.并发.I/O等多个方面.使用这些API一方面 ...
- Guava中Predicate的常见用法
Guava中Predicate的常见用法 1. Predicate基本用法 guava提供了许多利用Functions和Predicates来操作Collections的工具,一般在 Iterabl ...
- Java经典类库-Guava中的函数式编程讲解
如果我要新建一个java的项目,那么有两个类库是必备的,一个是junit,另一个是Guava.选择junit,因为我喜欢TDD,喜欢自动化测试.而是用Guava,是因为我喜欢简洁的API.Guava提 ...
- guava中eventbus注解使用
guava是 google 几个java核心类库的集合,包括集合.缓存.原生类型.并发.常用注解.基本字符串操作和I/O等等.学会使用该库相关api的使用,能使我们代码更简洁,更优雅,本章节我们来谈谈 ...
- Google Guava中的前置条件
前置条件:让方法调用的前置条件判断更简单. Guava在Preconditions类中提供了若干前置条件判断的实用方法,我们建议[在Eclipse中静态导入这些方法]每个方法都有三个变种: check ...
- Google guava 中的Monitor
synchronized 自从Java提供了多线程编程,我们经常需要处理这样的情况:在特定的时间,我们需要限制访问,确保只有一个线程访问我们的代码.Java提供了同步关键字synchronized来实 ...
- Guava中Lists.partition(List, size) 方法懒划分/懒分区
目录 Guava中Lists.partition(List, size) 方法懒划分/懒分区 背景 分析 总结 Guava中Lists.partition(List, size) 方法懒划分/懒分区 ...
- 强大的Guava中的新集合类型: Multiset, Multimap, BiMap, Table, ClassToInstanceMap, RangeSet, RangeMap等
一 Multiset /** * 新类型集合: Multiset: Multiset就是可以保存多个相同的对象,并且无序 * 占据了List和Set之间的一个灰色地带 * 其他实现: TreeMult ...
- Guava中针对集合的 filter和过滤功能
在guava库中,自带了过滤器(filter)的功能,可以用来对collection 进行过滤,先看例子: import com.google.common.base.Predicates; impo ...
随机推荐
- 全球可信并且唯一免费的HTTPS(SSL)证书颁发机构:StartSSL
全球可信并且唯一免费的HTTPS(SSL)证书颁发机构:StartSSL http://blog.s135.com/startssl/ 购买权威机构的证书一年大概得七八千元,其实这是不值得的,所以一直 ...
- ajax中的POST和GET传值
ajax中的POST和GET传值 转自:http://www.cnblogs.com/jtome/archive/2008/12/04/1347864.html Ajax中我们经常用到get和post ...
- meld文件的脚本
今天模仿着别人的脚本,结合网上的资料,摸索着写了一个简单的脚本,用来打开meld 工具.这个脚本虽然简单,但这是第一次自己写脚本,记录下来,作为自己python学习的起点.代码如下 #/use/bin ...
- Express框架是什么
Express框架是什么 一.总结 1.express框架:基于node.js的web应用框架,可快速搭建一个完整功能的网站,丰富的HTTP工具以及来自Connect框架的中间件随取随用. 二.Exp ...
- HTML基础第十一讲---背景标志
转自:https://i.cnblogs.com/posts?categoryid=1121494 您是否老觉得网页「空空的」,没错!一个可能是我们还没有很多内容,另一个可能则是我们还没有设定网页背景 ...
- React render return 空行问题
Uncaught Invariant Violation: App.render(): A valid React element (or null) must be returned. You ma ...
- JSP学习 —— 开篇:JSP,servlet容器,Tomcat,servlet容器之间的关系
JSP(JAVA SERVER PAGE)的缩写,其本身就是servlet的简化,是一种动态网页标准,其特点是在HTML代码中嵌入JAVA代码,JSP标签或用户标签来生成网页.至于它为什么会出现,主要 ...
- 详解javascript的深拷贝与浅拷贝
1. 认识深拷贝和浅拷贝 javascript中一般有按值传递和按引用传递两种复制,按值传递的是基本数据类型(Number,String,Boolean,Null,Undefined),一般存放于内存 ...
- javascript预解释中的机制
预解释是一种毫无节操的机制(自从学了预解释,从此节操是路人) in:‘num’ in window 判断num是否为window这个对象的一个属性,是的话返回true,不是返回false 1.预解释的 ...
- 代码高亮显示——google-code-prettify
先放着,搭建完HEXO博客再来写这篇. https://code.google.com/archive/p/google-code-prettify/