`
welcomezhang
  • 浏览: 17944 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Guava之RangeMap学习小结

阅读更多

简介

RangeMap是一种集合类型( collection type),它将不相交、且不为空的Range(key)映射给一个值(Value)。RangeMap跟一般的Map一样,存储键值对,按照键来取值。不同于Map的是键的类型必须是Range,也既是一个区间。

和RangeSet一样,实现RangeMap也是一个接口,实现它的也只有两个类,分别为mmutableRangeMap和TreeRangeMap。用的多的还是TreeRangeMap,下面主要以TreeRangeMap来说明RangeMap。

 

基础用法

 

添加/删除

    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:

1.如果TreeRangeMap要插入的区间与TreeRangeMap已保存的区间发生重叠,那么TreeRangeMap会对之前的区间切割,保留当前插入区间的完整性。

2.和RangeSet不一样,RangeMap不可以将相邻的区间合并,即使这个区间映射的值是一样的。

3.其中TreeRangeMap是key有序的。

 

遍历

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));
        }

 

结果同上。

note:

推荐使用第一种遍历的方法。因为第二种遍历rangeStringMap时rangeStringMap.get(next),多访问了一次rangeStringMap,效率比较慢。

分享到:
评论

相关推荐

    guava学习知识点

    Guava 是 Google 开源的一个 Java 工具包,包含了丰富的工具类和库,极大地扩展了 Java 的功能。这里我们详细探讨一下 Guava 的主要知识点。...学习并掌握 Guava,将极大地提升 Java 开发的生产力和代码质量。

    不加密Google Guava视频教程.txt

    ├─Google Guava 第07讲-Guava之StopWatch和JDK之ServiceLoader讲解.wmv ├─Google Guava 第08讲-Guava之Files讲解(废话比较多).wmv ├─Google Guava 第09讲-Guava之Files讲解第二部分.wmv ├─Google Guava ...

    guava-18.0(guava-18.0.jar和guava-18.0-sources.jar)

    Guava是Google开发的一个核心库,它为Java平台提供了许多实用工具类,涵盖了集合、并发、I/O、字符串处理、数学运算等多个方面。...这两个JAR文件的组合,为开发者提供了使用和学习Guava所需的一切。

    guava-19.0 jar和sources

    开发者可以通过查看这些源代码来理解Guava内部的工作原理,方便进行学习、调试和扩展。源码文件对于开发者来说是非常有价值的,特别是当遇到使用问题或想要自定义Guava功能时。 标签中的"guava"是指Guava库本身,它...

    guava-23.0.zip guava.jar guava

    在标题和描述中提到的"guava-23.0.zip"是一个包含Guava库版本23.0的压缩文件,而"guava.jar"则是Guava库的JAR文件,"guava"可能指的是Guava库本身或者与其相关的其他内容。 Guava库的核心特性包括: 1. **集合框架...

    guava-31.1-jre.jar

    guava

    guava-23.0-API文档-中文版.zip

    赠送jar包:guava-23.0.jar; 赠送原API文档:guava-23.0-javadoc.jar; 赠送源代码:guava-23.0-sources.jar; 赠送Maven依赖信息文件:guava-23.0.pom; 包含翻译后的API文档:guava-23.0-javadoc-API文档-中文...

    guava源文档

    guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档...

    guava-20.0-API文档-中文版.zip

    赠送jar包:guava-20.0.jar; 赠送原API文档:guava-20.0-javadoc.jar; 赠送源代码:guava-20.0-sources.jar; 赠送Maven依赖信息文件:guava-20.0.pom; 包含翻译后的API文档:guava-20.0-javadoc-API文档-中文...

    guava-17.0-API文档-中文版.zip

    赠送jar包:guava-17.0.jar; 赠送原API文档:guava-17.0-javadoc.jar; 赠送源代码:guava-17.0-sources.jar; 赠送Maven依赖信息文件:guava-17.0.pom; 包含翻译后的API文档:guava-17.0-javadoc-API文档-中文...

    guava-18.0-API文档-中文版.zip

    赠送jar包:guava-18.0.jar; 赠送原API文档:guava-18.0-javadoc.jar; 赠送源代码:guava-18.0-sources.jar; 包含翻译后的API文档:guava-18.0-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:...

    Guava 工程项目包 有实例

    这个"Guava 工程项目包"包含了一个完整的 Guava 源码库,名为 "guava-master",对于学习和理解 Guava 的内部实现非常有帮助。 1. **核心库功能** - **集合框架**:Guava 提供了丰富的集合类,如 Multiset(多集)...

    guava多个版本jar包

    这个压缩包包含的是Guava的不同版本,分别是guava-2.6.2.jar、guava-18.0.jar、guava-19.0.jar和guava-23.0.jar。每个版本都有其特定的功能和改进,让我们逐一探讨这些版本的关键特性。 1. guava-2.6.2.jar:这是...

    Guava for java 实例学习

    在开始学习Guava之前,你需要具备基本的Java编程知识。这样,你可以更好地理解和利用Guava提供的各种功能。 教程内容可能包括但不限于以下几个方面: 1. **集合框架增强**:Guava提供了如Multiset、Multimap、...

    guava-21.0-rc2 、guava-21.0-rc2-javadoc 、guava-21.0-rc2-sources

    3. **guava-21.0-rc2-sources**: 这是Guava库的源代码文件,对于开发者来说,查看源码可以帮助理解库内部的工作机制,进行学习、调试或者定制功能。通过源码,开发者可以看到Guava是如何实现各种高级数据结构、集合...

    guava-11.0.2-API文档-中文版.zip

    赠送jar包:guava-11.0.2.jar; 赠送原API文档:guava-11.0.2-javadoc.jar; 赠送源代码:guava-11.0.2-sources.jar; 赠送Maven依赖信息文件:guava-11.0.2.pom; 包含翻译后的API文档:guava-11.0.2-javadoc-API...

    google开源项目guava.jar包

    谷歌的Guava库是Java开发中的一个非常重要的开源项目,它提供了一系列的高效、实用的工具类,大大简化了常见的编程任务。Guava的核心特性包括集合框架、缓存、原生类型支持、并发库、字符串处理、I/O操作等。这个...

    guava-26.0-jre.zip

    Guava是Google为Java平台设计并维护的一个开源库,它提供了许多高级功能和实用工具,极大地增强了Java开发的效率和代码质量。Guava 26.0-jre版本是针对Java运行时环境(JRE)优化的一个特定版本,旨在更好地支持Java...

    Google Guava 官方教程

    通过学习 Google Guava 官方教程,开发者能够更有效地利用这些工具,提高代码质量和效率,同时降低维护成本。该教程深入浅出地解释了每个特性的使用方法,并通过实例帮助理解其工作原理。对于任何希望提升 Java 编程...

    guava-30.0-jre-API文档-中文版.zip

    赠送jar包:guava-30.0-jre.jar; 赠送原API文档:guava-30.0-jre-javadoc.jar; 赠送源代码:guava-30.0-jre-sources.jar; 赠送Maven依赖信息文件:guava-30.0-jre.pom; 包含翻译后的API文档:guava-30.0-jre-...

Global site tag (gtag.js) - Google Analytics