`
sungang_1120
  • 浏览: 309537 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类

Guava API学习之RangeSet

阅读更多

 

       前面谈到了Guava中新引入的Range类,也了解了其中的作用,那么今天来谈谈Guava中用到Range来的地方:RangeSet类。RangeSet类是用来存储一些不为空的也不相交的范围的数据结构。假如需要向RangeSet的对象中加入一个新的范围,那么任何相交的部分都会被合并起来,所有的空范围都会被忽略。
  讲了这么多,我们该怎么样利用RangeSet?RangeSet类是一个接口,需要用它的子类来声明一个RangeSet型的对象,实现了 RangeSet接口的类有ImmutableRangeSet和TreeRangeSet,ImmutableRangeSet是一个不可修改的 RangeSet,而TreeRangeSet是利用树的形式来实现。下面主要谈TreeRangeSet的用法:

 

public static void main(String[] args) {
		RangeSet rangeSet = TreeRangeSet.create();
		rangeSet.add(Range.open(1, 10));
		System.out.println(rangeSet);
		rangeSet.add(Range.closedOpen(11, 15));
		System.out.println(rangeSet);
		rangeSet.add(Range.open(15, 20));
		System.out.println(rangeSet);
		rangeSet.add(Range.openClosed(0, 0));
		System.out.println(rangeSet);
		rangeSet.remove(Range.open(5, 10));
		System.out.println(rangeSet);
}

 

 

运行结果:

 

[(1‥10)]
[(1‥10), [11‥15)]
[(1‥10), [11‥15), (15‥20)]
[(1‥10), [11‥15), (15‥20)]
[(1‥5], [11‥15), (15‥20)]

 

 

注意:RangeSet需要充分利用JDK 1.6中NavigableMap特性,所以JDK1.6以下版本无法使用

 

那如果我们需要遍历rangeSet中的所有元素可以用下面方法实现:

 

public void iteratorRangeSet(RangeSet integerRangeSet) {
        if(integerRangeSet == null){
            return;
        }

        Set<Range> ranges = integerRangeSet.asRanges();
        Iterator<Range> iterator = ranges.iterator();
        while(iterator.hasNext()){
            Range next = iterator.next();
            System.out.println(next);
        }
}

 运行结果:

 

 

(1‥5]
[11‥15)
(15‥20)

 如果我们需要得到rangeSet互补的范围,我们可以用RangeSet提供的 complement()方法,rangeSet.complement()同样是一个RangeSet,其中的元素也是互不相交、且不为空的 RangeSet,那么rangeSet的互补集可以像下面这样来写:

 

 

RangeSet complement = rangeSet.complement();
System.out.println(complement);

 运行结果

 

 

{(-∞‥1)(5‥10)(10‥11)[15‥15][20‥+∞)}

 

 

正好是rangeSet的互补。
如果需要在rangeSet中查询某个元素是否在rangeSet中,可以用contains(C)来实现,其中C extends java.lang.Comparable。比如我想得到上述rangeSet是否包含15,可以这样写:

 

boolean isIn = rangeSet.contains(15);
System.out.println(isIn);//false,因为上述范围不包含元素15.

 如果想知道某个元素是在rangeSet中哪个范围里面,可以这样写:

 

 

Range integerRange = rangeSet.rangeContaining(17);
System.out.println(integerRange); 
//输出(15‥20),因为17被包含在(15‥20)中,所以输出这个范围。

 如果想知道某个范围是否包含在rangeSet的范围中,可以这样写:

 

boolean encloses = rangeSet.encloses(Range.closedOpen(18, 20));
System.out.println(encloses);//true.因为范围(18,20)包含在范围(15,20)中
encloses = rangeSet.encloses(Range.closedOpen(5, 20));
System.out.println(encloses);//false.因为范围(5,20)不被rangeSet中任何范围包含.

 

分享到:
评论

相关推荐

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

    包含翻译后的API文档:guava-17.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.google.guava:guava:17.0; 标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开...

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

    包含翻译后的API文档:guava-18.0-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:com.google.guava,artifactId:guava,version:18.0 使用方法:解压翻译后的API文档,用浏览器打开“index.html”...

    guava-API文档

    guava-API文档

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

    包含翻译后的API文档:guava-20.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.google.guava:guava:20.0; 标签:google、guava、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开...

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

    包含翻译后的API文档:guava-23.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.google.guava:guava:23.0; 标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开...

    guava-19.0-API文档-中英对照版.zip

    包含翻译后的API文档:guava-19.0-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:com.google.guava:guava:19.0; 标签:google、guava、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用...

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

    包含翻译后的API文档:guava-27.0.1-jre-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.google.guava:guava:27.0.1-jre; 标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用...

    Guava 23.0 API (CHM格式)

    Guava 23.0 API CHM格式,可以搜索,方便离线查阅。

    guava-12.0.1-API文档-中英对照版.zip

    包含翻译后的API文档:guava-12.0.1-javadoc-API文档-中文(简体)-英语-对照版.zip 对应Maven信息:groupId:com.google.guava,artifactId:guava,version:12.0.1 使用方法:解压翻译后的API文档,用浏览器打开...

    guava-28.0-android-API文档-中文版.zip

    包含翻译后的API文档:guava-28.0-android-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.google.guava:guava:28.0-android; 标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,...

    guava-18.0-API文档-中英对照版.zip

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

    guava 常用API说明

    NULL 博文链接:https://whnqwe.iteye.com/blog/2313173

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

    包含翻译后的API文档:guava-16.0.1-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.google.guava:guava:16.0.1; 标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开...

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

    包含翻译后的API文档:guava-30.0-jre-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.google.guava:guava:30.0-jre; 标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器...

    Guava 19 API ( CHM格式 )

    Guava 中文是石榴的意思,该项目是 Google 的一个开源项目,包含许多 Google 核心的 Java 常用库。 目前主要包含: com.google.common.annotations com.google.common.base com.google.common.collect ...

    guava学习知识点

    guava学习体系知识点的学习,归纳出来了知识点。根据知识点去学习可以快熟了解guava

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

    包含翻译后的API文档:guava-25.0-jre-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.google.guava:guava:25.0-jre; 标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器...

    guava19_api_chm英文文档

    guava19_api_chm英文文档

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

    包含翻译后的API文档:guava-30.1.1-jre-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.google.guava:guava:30.1.1-jre; 标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用...

Global site tag (gtag.js) - Google Analytics