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 ...
随机推荐
- 洛谷——P1816 忠诚
https://www.luogu.org/problem/show?pid=1816#sub 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记 ...
- Rdis-主从复制
配置 配置一个从服务器非常简单, 只要在配置文件中增加以下的这一行就可以了: slaveof 192.168.1.1 6379 注:主:bind 192.168.10.1 (指定主机IP) 当然, 你 ...
- COOKIE传值
1.遍历所有cookie foreach (string _key in Request.Cookies.AllKeys)//遍历主键 { Htt ...
- ES6 数组、对象的扩展
8. 数组的扩展 扩展运算符(...),将一个数组转为用逗号分隔的参数序列. 复制数组 const a2=[...a1] 合并数组 [...arr1, ...arr2, ...arr3]; arr1. ...
- Mycat 读写分离+分库分表
上次进过GTID复制的学习记录,已经搭建好了主从复制的服务器,现在利用现有的主从复制环境,加上正在研究的Mycat,实现了主流分布式数据库的测试 Mycat就不用多介绍了,可以实现很多分布式数据库的功 ...
- PatentTips - Method, apparatus and system for instructing a virtual device from a virtual machine
BACKGROUND OF THE INVENTION A virtual machine (VM) may be or include a framework or environment crea ...
- [D3] Build an Area Chart with D3 v4
Similar to line charts, area charts are great for displaying temporal data. Whether you’re displayin ...
- js进阶 14-5 $.getScript()和$.getJSON()方法的作用是什么
js进阶 14-5 $.getScript()和$.getJSON()方法的作用是什么 一.总结 一句话总结:$.getScript()和$.getJSON()方法专门用来加载JS/JSON文件(远程 ...
- swift项目第九天:正则表达式的学习
import UIKit /* 练习1:匹配abc 练习2:包含一个a~z,后面必须是0~9 -->[a-z][0-9]或者[a-z]\d * [a-z] : a~z * [0-9]/\d : ...
- keil出现蓝色小箭头