在Guava中新增了一个新的类型Range,从名字就可以了解到,这个是和区间有关的数据结构。从Google官方文档可以得到定义:Range定义了连续跨度的范围边界,这个连续跨度是一个可以比较的类型(Comparable type)。比 如1到100之间的整型数据。不过我们无法遍历出这个区间里面的值。如果需要达到这个目的,我们可以将这个范围传给 ContiguousSet.create(com.google.common.collect.Range, com.google.common.collect.DiscreteDomain).来达到遍历这个范围里面的值。
我们知道,在数学里面的范围是有边界和无边界之分的;同样,在Guava中也有这个说法。如果这个范围是有边界的,那么这个范围又可以分为包括开集(不包括端点)和闭集(包括端点);如果是无解的可以用+∞表示。如果枚举的话,一共有九种范围表示:
Guava Range
上表中的功能函数那一栏表示Range类提供的函数,分别来表示九种可能出现的范围区间。如果区间两边都存在范围,在这种情况下,区间右边的数不可能比区间左边的数小。在极端情况下,区间两边的数是相等的,但前提条件是最少有一个边界是闭集的,否则是不成立的。比如:
[a..a] : 里面只有一个数a; [a..a); (a..a] : 空的区间范围,但是是有效的; (a..a) : 这种情况是无效的,构造这样的Range将会抛出异常。
在使用Range时需要注意:
- 在构造区间时,尽量使用不可改变的类型。如果你需要使用可变的类型,在区间类型构造完成的情况下,请不要改变区间两边的数;
- 一个实现了Comparable接口的类传进Range将会发生未定义的情况;目前Range API还没有阻止这种用法,但是未来可能会改变。
相关推荐
**正文** Google Guava是Google开发的一个开源Java...通过学习和熟练掌握Guava,开发者能够编写出更加高效、易维护的Java应用程序。在实际工作中,根据项目需求选择合适的Guava工具,可以显著提升软件性能和可扩展性。
以上只是 Guava 30.1.1 版本中的一部分核心功能,实际使用中还有许多其他实用工具类,如 `Range`, `EventBus`, `RateLimiter` 等。Guava 的设计目标是提高代码质量和效率,通过提供这些工具类,开发者可以更加专注于...
Guava对Java集合框架进行了扩展和优化,提供了如Multiset(多集)、Multimap(多映射)、ImmutableList、ImmutableSet、ImmutableMap等不可变集合,以及Ordering(排序)和Range(范围)等高级数据结构。这些类在...
通过Jackson Datatype Guava,我们可以让Jackson理解和序列化Guava库中的复杂数据结构,如Multimap、RangeSet、Optional等。这极大地提高了JSON处理的灵活性和效率。 Jackson Datatype Collections模块则专注于对...
1. **集合框架**:Guava对Java集合框架进行了扩展,引入了如Multiset(多集)、Multimap(多映射)、ImmutableList、ImmutableMap和ImmutableSet等不可变集合,以及Ordering(排序)和Range(范围)类。这些集合提供...
Guava 提供了 Range 和 RangeSet 类,用于处理数值范围,特别适合在数据分析和统计场景中使用。 **9. 其他工具** Guava 还包含了如事件监听、服务加载、反射工具、时间戳处理等其他实用工具,为 Java 开发提供了全...
Jackson-datatype-guava模块使得Jackson能够理解并处理Guava特定的类,如Range、Optional、Multiset等,将其转换为JSON和从JSON解析。这极大地提高了开发人员在处理Guava对象时的工作效率,特别是在与JSON交换数据的...
这使得使用Guava的项目能够无缝集成AssertJ,享受到更加直观和强大的断言功能,比如对于`Optional`、`Multiset`、`Range`等Guava特性的断言。 在实际应用中,AssertJ的强大力量体现在其丰富的API设计上。例如,针对...
例如,Guava库提供了一个`Range`类,它支持区间操作并提供了丰富的API。通过阅读源码,我们可以学习到专业和高效的区间处理方式。 至于“工具”标签,可能暗示了存在一些工具或库可以帮助我们处理区间相关的任务。...