Google 开源库Guava详解

这篇具有很好参考价值的文章主要介绍了Google 开源库Guava详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述

Guava是一组来自Google的核心Java库,包括新的集合类型(如多映射和多集)、不可变集合、图库和并发、I/O、哈希、原语、字符串等实用程序!它广泛用于Google中的大多数Java项目,也被许多其他公司广泛使用。
Guava 开发要求 :
JRE风格需要JDK 1.8或更高版本。
如果您需要支持Android,请使用Android风格。您可以在Android目录中找到Android Guava源代码。

guava github 开源地址:GitHub - google/guava: https://github.com/google/guava

官网用户手册:https://github.com/google/guava/wiki

guava 的Maven groupID是com.google.Guava,其artifact ID是guava 。Guava提供了两种不同的“风格”:一种用于(Java 8+)JRE,另一种用于Android或任何希望与Android兼容的库。这些口味在Maven版本字段中指定为32.1.2-jre或32.1.2-安卓。 

com.google.guava 依赖:

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>32.1.2-jre</version>
  <!-- or, for Android: -->
  <version>32.1.2-android</version>
</dependency>

二、使用Guava

Guava项目包含我们在基于Java的项目中依赖的几个Google核心库:集合、缓存、原语支持、并发库、通用注释、字符串处理、I/O等。这些工具中的每一个确实每天都被谷歌人用于生产服务。
但浏览Javadoc并不总是学习如何最好地利用库的最有效方法。

基本使用: 

  • 使用和避免null:null可能是模棱两可的,可能会导致令人困惑的错误,有时只是令人不快。许多Guava公用事业拒绝并在空值上快速失败,而不是盲目接受它们。
  • 先决条件:更容易地测试方法的先决条件。
  • 通用对象方法:简化object方法的实现,如hashCode()和toString()。
  • Ordering:Guava强大的“流畅比较器”类。
  • Throwables:简化传播和检查异常和错误。

Collections:Guava对JDK收藏生态系统的扩展。这些是番石榴最成熟和最受欢迎的部分。

  • 不可变集合,用于防御编程、常量集合和提高的效率。
  • 新的集合类型,用于JDK集合不能很好地处理的用例:多集合、多映射、表、双向映射等。
  • 强大的收集实用程序,用于java.util.Collections中未提供的常见操作。
  • 扩展实用程序:编写集合装饰器?实现迭代器?我们可以让这变得更容易。

:用于建模图结构数据的库,即实体及其之间的关系。主要功能包括: 

  • 图:其边是匿名实体的图,没有自己的标识或信息。
  • ValueGraph:其边具有关联的非唯一值的图。
  • 网络:其边是唯一对象的图。
  • 支持可变和不可变、有向和无向的图以及其他几个属性。

缓存:本地缓存,处理得当,并支持各种过期行为。
功能习语:谨慎使用,Guava的功能习语可以显著简化代码。
并发:强大、简单的抽象,使编写正确的并发代码变得更容易 

  • ListenableFuture:Futures,完成时回调。
  • 服务:启动和关闭的东西,为您处理困难的状态逻辑。

String :一些非常有用的字符串实用程序:拆分、连接、填充等。
Primitive :JDK不提供的对基本体类型(如int和char)的操作,包括某些类型的无符号变体。
范围:Guava强大的API,用于处理可比较类型的范围,包括连续和离散。
I/O:简化了Java 5和6的I/O操作,特别是在整个I/O流和文件上。
哈希:用于比Object.hashCode()提供的更复杂哈希的工具,包括Bloom过滤器。
EventBus:在组件之间发布订阅样式的通信,而不要求组件彼此显式注册。
Math:JDK未提供的优化、经过彻底测试的数学实用程序。
反射:用于Java反射功能的Guava实用程序。 

三、不可变集合

1、例子

public static final ImmutableSet<String> COLOR_NAMES = ImmutableSet.of(
  "red",
  "orange",
  "yellow",
  "green",
  "blue",
  "purple");

class Foo {
  final ImmutableSet<Bar> bars;
  Foo(Set<Bar> bars) {
    this.bars = ImmutableSet.copyOf(bars); // defensive copy!
  }
}

2、不可变集合优点

不可变对象具有许多优点,包括:

  1. 不受信任的库可以安全使用。
  2. 线程安全:可以由许多线程使用,没有竞争条件的风险。
  3. 不需要支持突变,并且可以通过该假设节省时间和空间。所有不可变集合实现都比其可变同级更节省内存。(分析)
  4. 可以用作常量,预期它将保持固定。

3、不可变集合使用

ImmutableXXX集合可以通过几种方式创建:

  • 使用copyOf方法,例如ImmutableSet.copyOf(set)
  • 使用of方法,例如,ImmutableSet.of(“a”,“b”,“c”)或ImmutablesMap.of((“a”,1,“b”,2)
  • 例如,使用生成器, 
public static final ImmutableSet<Color> GOOGLE_COLORS =
   ImmutableSet.<Color>builder()
       .addAll(WEBSAFE_COLORS)
       .add(new Color(0, 191, 255))
       .build();

 Guava 为 java jdk 每种标准集合类型提供了简单易用的不可变版本,包括 Guava 自己的集合变体,为 java 提供的不可变版本都是继承 java jdk 的接口而来,所以操作上基本无异。下面接口的实现类也都有对应的不可变版本。

Interface

JDK or Guava?

Immutable Version

Collection

JDK

ImmutableCollection

List

JDK

ImmutableList

Set

JDK

ImmutableSet

SortedSet/NavigableSet

JDK

ImmutableSortedSet

Map

JDK

ImmutableMap

SortedMap

JDK

ImmutableSortedMap

Multiset

Guava

ImmutableMultiset

SortedMultiset

Guava

ImmutableSortedMultiset

Multimap

Guava

ImmutableMultimap

ListMultimap

Guava

ImmutableListMultimap

SetMultimap

Guava

ImmutableSetMultimap

BiMap

Guava

ImmutableBiMap

ClassToInstanceMap

Guava

ImmutableClassToInstanceMap

Table

Guava

ImmutableTable文章来源地址https://www.toymoban.com/news/detail-696902.html

到了这里,关于Google 开源库Guava详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【开源与项目实战:开源实战】83 | 开源实战三(下):借Google Guava学习三大编程范式中的函数式编程

    现在主流的编程范式主要有三种,面向过程、面向对象和函数式编程。在理论部分,我们已经详细讲过前两种了。今天,我们再借机会讲讲剩下的一种,函数式编程。 函数式编程并非一个很新的东西,早在 50 多年前就已经出现了。近几年,函数式编程越来越被人关注,出现

    2024年02月11日
    浏览(46)
  • 推荐Java开发常用的工具类库google guava

    Guava Guava是一个Google开源的Java核心库,它提供了许多实用的工具和辅助类,使Java开发更加简洁、高效、可靠。目前和 hutool 一起,是业界常用的工具类库。 shigen 也比较喜欢使用,在这里列举一下常用的工具类库和使用的案例。 参考: 整理一波Guava的使用技巧 - 掘金 Guava中这

    2024年02月09日
    浏览(46)
  • 设计模式学习笔记 - 开源实战三(下):借助Google Guava学习三大编程范式中的函数式编程

    现在主流的编程范式主要有三种,面向过程、面向对象和函数式编程。在理论部分,已经介绍了前面两种编程范式。本章再讲讲剩下的编程范式,函数式编程。 函数式编程并非是一个很新的东西,早在 50 年前就已经出现。近几年,函数式编程越来越被人关注,出现了很多新

    2024年04月22日
    浏览(55)
  • com.google.guava:guava 组件安全漏洞及健康分析

    维护者 google组织 许可证类型 Apache-2.0 首次发布 2010 年 4 月 26 日 最新发布时间 2023 年 8 月 1 日 GitHub Star 48189 GitHub Fork 10716 依赖包 28,694 依赖存储库 219,576 Guava 是 Google 的一组核心 Java 库,其中包括新的集合类型(例如 multimap 和 multiset)、不可变集合、图形库以及用于并发、

    2024年02月10日
    浏览(50)
  • Google的guava缓存学习使用

    导入依赖 使用1 项目中使用到了缓存,定义一个切面,拦截类或方法上存在@SysDataCache注解请求,对于这些方法的返回值进行缓存。项目中主要还是使用在缓存常量,一些不易改变的值 定义注解 定义切面和初始化缓存容器并使用缓存 项目中缓存使用 使用2 作为性能缓存工具,

    2024年01月25日
    浏览(45)
  • 【译】Google Guava 的 Table 接口介绍

    原文:https://www.baeldung.com/guava-table 在本教程中,我们将展示如何使用 Google Guava 的 Table 接口及其多个实现。 Guava 的 Table 是一种集合,表示包含行、列和相关单元格值的表结构,行和列充当有序的键对。 让我们看看如何使用 Table 类。 2.1. Maven依赖 首先,在 pom.xml 中添加 Goo

    2024年02月06日
    浏览(37)
  • com.google.common.collect 是 Google Guava 库中的一个包,它提供了一系列扩展和增强 Java 集合框架的工具类和数据结构

    com.google.common.collect 是 Google Guava 库中的一个包,它提供了一系列扩展和增强 Java 集合框架的工具类和数据结构。Guava 的集合工具在设计上强调性能、不可变性、功能性和易用性。 以下是 com.google.common.collect 包中一些重要的类和接口: Immutable Collections: ImmutableSet:一个不可变

    2024年03月19日
    浏览(61)
  • 【Java技术专题】「Guava开发指南」手把手教你如何进行使用Guava工具箱进行开发系统实战指南(基础编程篇)

    Preconditions(前置条件):让方法调用的前置条件判断更简单 。 Guava在Preconditions 类中提供了若干前置条件判断的实用方法,我们强烈建议在 Eclipse 中静态导入这些方法。每个方法都有三个变种: 当方法没有额外参数时,抛出的异常中不包含错误消息,这会使得调用方很难确

    2024年02月07日
    浏览(78)
  • Guava-RateLimiter详解

    简介:  常用的限流算法有漏桶算法和令牌桶算法,guava的RateLimiter使用的是令牌桶算法,也就是以固定的频率向桶中放入令牌,例如一秒钟10枚令牌,实际业务在每次响应请求之前都从桶中获取令牌,只有取到令牌的请求才会被成功响应,获取的方式有两种:阻塞等待令牌或

    2024年02月06日
    浏览(39)
  • Java中的Guava是什么?

    Java中的Guava是一个非常强大的Java库,它提供了很多实用的工具类和方法,可以帮助我们更高效地开发Java应用程序。从新手的角度来看,Guava可以让我们在Java编程中变得更加简单、快速和高效。 Guava的命名来源于“Google’s favorite Java library”(谷歌最喜欢的Java库)。它是由G

    2024年02月14日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包