码迷,mamicode.com
首页 > 其他好文 > 详细

Guava中Range和Cut简介

时间:2015-07-27 18:58:26      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:guava   java   range   

Guava中用Range类表示区间,Range中的两个端点是Cut类实例,形如:

public final class Range <C extends java.lang.Comparable> implements com.google.common.base.Predicate<C>, java.io.Serializable {
    ...//其他数据
    final com.google.common.collect.Cut<C> lowerBound;
    final com.google.common.collect.Cut<C> upperBound;
    ...//其他方法
}

对于Range来说,对应数学上几种类型的区间:

数学形式 Range对应的创建函数
(a..b) Range.open(C, C)
[a..b] Range.closed(C, C)
[a..b) Range.closedOpen(C, C)
(a..b] Range.openClosed(C, C)
(a..+∞) Range.greaterThan(C)
[a..+∞) Range. atLeast(C)
(-∞..b) Range.lessThan(C)
(-∞..b] Range.atMost(C)
(-∞..+∞) Range.all()

需要注意的是,Range的构造函数为private,除了用以上方式创建,还可以显示指定两端的包含情况,使用:

区间描述 Range对应的创建函数
显示确定两端是否包含 range(C, BoundType, C, BoundType)
从端点到正无穷 ((a..+∞) or [a..+∞)) downTo(C, BoundType)
从端点到负无穷 ((-∞..b) or (-∞..b]) upTo(C, BoundType)

BoundType是枚举类型,定义了OPEN和CLOSED,代码如下:

public enum BoundType {
    OPEN {
        BoundType flip() {
            return CLOSED;
        }
    },
    CLOSED {
        BoundType flip() {
            return OPEN;
        }
    };
    private BoundType() {
    }
    static BoundType forBoolean(boolean inclusive) {
        return inclusive?CLOSED:OPEN;
    }
    abstract BoundType flip();
}

Range实例可以通过lowerBoundType()和upperBoundType()方法获得两端的BoundType。
Range类中比较有用的几个方法

方法签名 方法描述
public boolean encloses(Range other) 判断是否完全包含other区间
public boolean isConnected(Range other) 判断是否和other区间是否连接,边界点一开一闭也算连接
public Range intersection(Range other) 求和other之间的最小的区间,相当于求交
public Range span(Range other) 求和other区间能完全包含两区间的最小区间,相当于求并

Cut是一个抽象类

abstract class Cut<C extends Comparable> implements Comparable<Cut<C>>, Serializable {
    final C endpoint;
    ...//其他东西
}

内部只保存一个端点数据。在Cut内部有四个内部类,要拿到实例只能返回几个继承Cut的内部类(private static final class),分别表示普通的 BelowValue,AboveValue,BelowAll,AboveAll,其中后两个在内部还各有一个 static final 的 INSTANCE,用来表示最高(低),反正是最,只需要一个。这些类实现 Cut 的虚函数。

参考链接:
[1]http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Range.html
[2]https://code.google.com/p/guava-libraries/wiki/RangesExplained

版权声明:本文为博主原创文章,未经博主允许不得转载。

Guava中Range和Cut简介

标签:guava   java   range   

原文地址:http://blog.csdn.net/xiangyubobo/article/details/47086155

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!