【Guava】Guava: Google Core Libraries for Java 好用工具类

news2024/12/24 9:11:10

文章目录

  • Guava前言
  • Guava的优势
  • 官方网址
  • guava类库使用
    • 基本工具类:让使用Java语言更令人愉悦。
    • 集合类:集合类库是 Guava 对 JDK 集合类的扩展。
    • Guava 缓存: 本地缓存,可以很方便的操作缓存对象,并且支持各种缓存失效行为模式。
    • Functional idioms(函数式): 简洁, Guava实现了Java的函数式编程,可以显著简化代码。
    • Concurrency(并发):强大,简单的抽象,让我们更容易实现简单正确的并发性代码。
    • Strings: 一个非常非常有用的字符串工具类: 提供 splitting,joining, padding 等操作。
    • Primitives: 扩展 JDK 中未提供的对原生类型(如int、char等)的操作, 包括某些类型的无符号的变量。
    • Ranges: Guava 一个强大的 API,提供 Comparable 类型的范围处理, 包括连续和离散的情况。
    • I/O: 简化 I/O 操作, 特别是对 I/O 流和文件的操作, for Java 5 and 6.
    • Hashing: 提供比 Object.hashCode() 更复杂的 hash 方法, 提供 Bloom filters.
    • EventBus: 基于发布-订阅模式的组件通信,但是不需要明确地注册在委托对象中。
    • Math: 优化的 math 工具类,经过完整测试。
    • Reflection: Guava 的 Java 反射机制工具类。
  • 代码实战

Guava前言

在这里插入图片描述

Guava是Google的一组核心Java库,其中包括新的集合类型 (如multimap和multiset)不可变集合图库,以及用于并发、I/O、哈希、缓存、基元、字符串等的实用程序!它 被广泛用于谷歌内的大多数Java项目,并被许多人广泛使用。

Guava是一种基于开源的Java库,Google Guava源于2007年的"Google Collections Library"。这个库是为了方便编码,并减少编码错误。这个库用于提供集合,缓存,支持原语句,并发性,常见注解,字符串处理,I/O和验证的实用方法。

com.google.common.annotations:普通注解类型。
com.google.common.base:基本工具类库和接口。
com.google.common.cache:缓存工具包,非常简单易用且功能强大的JVM内缓存。
com.google.common.collect:带泛型的集合接口扩展和实现,以及工具类,这里你会发现很多好玩的集合。
com.google.common.eventbus:发布订阅风格的事件总线。
com.google.common.hash: 哈希工具包。
com.google.common.io:I/O工具包。
com.google.common.math:原始算术类型和超大数的运算工具包。
com.google.common.net:网络工具包。
com.google.common.primitives:八种原始类型和无符号类型的静态工具包。
com.google.common.reflect:反射工具包。
com.google.common.util.concurrent:多线程工具包。

Guava的优势

标准化 - Guava库是由谷歌托管。
高效 - 可靠,快速和有效的扩展JAVA标准库
优化 -Guava库经过高度的优化。
函数式编程:增加Java功能和处理能力
实用程序:提供经常需要在应用程序中开发的许多实用程序类
验证:提供标准的故障安全验证机制。
最佳实践:强调最佳的做法。

它是一个提高代码质量、简化工作,促使代码更有弹性、更加简洁的工具

官方网址

https://gitcode.net/mirrors/google/guava

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

guava类库使用

https://github.com/google/guava/wiki

基本工具类:让使用Java语言更令人愉悦。

1、使用和避免 null:null 有语言歧义, 会产生令人费解的错误, 反正他总是让人不爽。很多 Guava 的工具类在遇到 null 时会直接拒绝或出错,而不是默默地接受他们。
2、前提条件:更容易的对你的方法进行前提条件的测试。
3、常见的对象方法: 简化了Object常用方法的实现, 如 hashCode() 和 toString()。
4、排序: Guava 强大的 "fluent Comparator"比较器, 提供多关键字排序。
5、Throwable类: 简化了异常检查和错误传播。

集合类:集合类库是 Guava 对 JDK 集合类的扩展。

1、Immutable collections(不变的集合): 防御性编程, 不可修改的集合,并且提高了效率。
2、New collection types(新集合类型):JDK collections 没有的一些集合类型,主要有:multisets,multimaps,tables, bidirectional maps等等
3、Powerful collection utilities(强大的集合工具类): java.util.Collections 中未包含的常用操作工具类
4、Extension utilities(扩展工具类): 给 Collection 对象添加一个装饰器? 实现迭代器? 我们可以更容易使用这些方法。

Guava 缓存: 本地缓存,可以很方便的操作缓存对象,并且支持各种缓存失效行为模式。

Functional idioms(函数式): 简洁, Guava实现了Java的函数式编程,可以显著简化代码。

Concurrency(并发):强大,简单的抽象,让我们更容易实现简单正确的并发性代码。

1、ListenableFuture(可监听的Future): Futures,用于异步完成的回调。
2、Service: 控制事件的启动和关闭,为你管理复杂的状态逻辑。

Strings: 一个非常非常有用的字符串工具类: 提供 splitting,joining, padding 等操作。

Primitives: 扩展 JDK 中未提供的对原生类型(如int、char等)的操作, 包括某些类型的无符号的变量。

Ranges: Guava 一个强大的 API,提供 Comparable 类型的范围处理, 包括连续和离散的情况。

I/O: 简化 I/O 操作, 特别是对 I/O 流和文件的操作, for Java 5 and 6.

Hashing: 提供比 Object.hashCode() 更复杂的 hash 方法, 提供 Bloom filters.

EventBus: 基于发布-订阅模式的组件通信,但是不需要明确地注册在委托对象中。

Math: 优化的 math 工具类,经过完整测试。

Reflection: Guava 的 Java 反射机制工具类。

代码实战

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/688931.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python爬虫-逆向实例小记-1

注意&#xff01;&#xff01;&#xff01;&#xff01;某政府网站逆向实例仅作为学习案例&#xff0c;禁止其他个人以及团体做谋利用途&#xff01;&#xff01;&#xff01;&#xff01; 案例分析 第一步&#xff1a;下图标注出来的是获取请求断点&#xff0c;断点出自 请求…

Android实现拨打电话功能

Android实现拨打电话功能 先上UI效果图点击联系博主拒绝权限同意权限直接拨号 跳转到拨号界面跳转到拨号界面 同时附带号码 代码实现AndroidManifest.xml中添加权限点击联系博主判断是否有拨号权限申请权限回调直接拨号跳转到拨号界面跳转到拨号界面 同时附带号码 完整代码Main…

chatgpt赋能python:Python色板介绍:让数据可视化更加迷人

Python色板介绍&#xff1a;让数据可视化更加迷人 在数据可视化中&#xff0c;合适的配色方案是非常重要的。Python色板是一种常用的工具&#xff0c;可以帮助数据分析师和科学家创建漂亮、易于阅读的图表。本文将为大家介绍Python色板&#xff0c;包括一些主流的Python色板、…

百度排名代发|百度排名蜘蛛池代发收录排名接单!

百度排名代发|百度排名蜘蛛池代发收录排名接单! 推广告忽然没有展现了&#xff0c;咋回事&#xff1f; 这是今天一个粉丝问我的问题&#xff0c;我帮他看了一下&#xff0c;是因为他推广了一个打不开的链接&#xff0c;所以说百度没有给他展现&#xff0c;可以看一下这个还好…

微信小程序-上拉加载更多和下拉刷新

微信小程序-上拉加载更多和下拉刷新 下拉刷新 页面配置文件中配置"enablePullDownRefresh": true开启下拉刷新 {"usingComponents": {},"navigationBarTitleText": "订单列表","enablePullDownRefresh": true }设置onPul…

使用阿里云域名和腾讯云服务器 出现的问题--------记录

这里使用阿里云申请的域名&#xff0c;阿里云备案成功 服务器为腾讯云&#xff0c;后端使用的node这里获取数据时返回一篇html如下 <!DOCTYPE html> <html><head><meta charset"utf-8" /><meta http-equiv"X-UA-Compatible" c…

【bug】vscode python 3.6 无法debug 解决方案

某个环境是使用python 3.6 安装的&#xff0c;vscode没法调试。是由于python插件太新了&#xff0c;直接下载一个&#xff0c;用VSIX安装 1.下载python 拓展包 https://marketplace.visualstudio.com/_apis/public/gallery/publishers/ms-python/vsextensions/python/2022.6.0/…

【简单】使用ChatGPT和QT从零开始构建一个计算器应用

在这篇博文中&#xff0c;我将向大家展示如何使用ChatGPT和Qt来构建一个完整的计算器应用。我们将从零开始&#xff0c;逐步引导您完成整个项目&#xff0c;包括需求分析、软件设计、代码编写等环节。该项目代码全部由GPT编写,10分钟完成。 一&#xff0c;项目概述 本项目旨在…

数据库监控与调优【八】—— 索引类型

索引类型 MySQL有多种索引类型&#xff0c;使用不同的角度&#xff0c;分类也有所不同。 程序猿之间沟通时&#xff0c;经常会聊到各种索引类型&#xff0c;比如你说&#xff1a;“这是一个组合索引”&#xff0c;他说“这是一个聚簇索引”&#xff0c;如果不了解这些术语&am…

【计算机网络】UDP和TCP的对比

1.协议栈 2.面向连接&#xff1f; 3.支持单薄、多播、广播&#xff1f; 4.面向应用报文还是字节流&#xff1f; 5.应用场景 6.首部长度 7.小结

python 实现批量图片不拉伸尺寸归一化

在进行机器学习或深度学习之前&#xff0c;都要对样本图片进行预处理&#xff0c;其中需要将图片的尺寸统一调整。很多时候&#xff0c;样本的来源很多&#xff0c;尺寸和比例也不统一&#xff0c;可能来自于互联网爬虫&#xff0c;可能来自于不同的手机拍摄。如果将不同尺寸与…

CentOS Linux 8使用阿里源(安装jdk11、git测试)

一、备份 cd /etc/yum.repos.d/ mkdir bak mv CentOS-Linux-* bak二、下载新源 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo三、安装软件测试 sudo yum -y install java-11-openjdk-devel java -versionsudo yu…

瑞亚太空活动公司RSA与英国国防与安全加速器达成量子项目合作

​ &#xff08;图片来源&#xff1a;网络&#xff09; 瑞亚太空活动公司&#xff08;RSA&#xff09;与英国国防与安全加速器&#xff08;DASA&#xff09;签署了合作协议&#xff0c;主要开发名为“无限交换”的可操纵量子真空的技术项目。这是RSA在英国签订的第一份合同&…

B端产品之数据分析能力

目录 学习目标&#xff1a;数据分析的思维框架以及工作需要的知识结构&#xff0c;数据分析结果外化-撰写数据分析报告 分析流程分析要点分析报告 数据分析流程 明确主题&#xff0c;尽量细化提出假设验证并修正假设&#xff1a;分析过程中对各个关联维度进行数据可视化观察…

怎么用迅捷PDF转换器在线提取PDF文件中的图片

大家在学习或者是办公中经常使用到PDF文件&#xff0c;我们在做一份工作文件的时候&#xff0c;需要一些资料来补充内容&#xff0c;这些资料是以PDF文件格式呈现&#xff0c;在使用PDF文件时&#xff0c;文件中有的图片做到很精细&#xff0c;想要单独提取保存下来备用。那么&…

【解决】IntelliJ IDEA无法识别package.json里面定义的脚本问题(npm: No scripts found)

错误提示&#xff1a;npm: No scripts found 在File-Settings-Editor-File Types&#xff0c;右边找到JSON&#xff0c;在File name patterns中添加了*.json,然后就识别了

全局安装vue脚手架,VSCode没有权限

一、全局安装vue脚手架 winR&#xff0c;输入cmd&#xff0c;打开命令行窗口&#xff0c;输入 npm install -g vue/cli &#xff0c;回车 npm install -g vue/cli 二、查看是否安装成功&#xff0c;出现版本信息&#xff0c;就表示安装成功 vue --version 三、打开VSCode&…

基于matlab偏振建模和分析(附源码)

一、前言 这个例子介绍了极化的基本概念。它展示了如何使用相控阵系统工具箱分析极化场并对极化天线和目标之间的信号传输进行建模。 二、电磁场的极化 天线产生的电磁场与远场中的传播方向正交。场可以指向此平面中的任何方向&#xff0c;因此可以分解为两个正交分量。从理论上…

EC\AC\BC\pair-wise组合覆盖测试技术

基本概念介绍 场景说明 某个美颜相机的系统测试&#xff1a; 被测对象1-【系统】取值有3种可能&#xff1a;windows\IOS\Linux 被测对象2-【摄像头】取值有4种可能&#xff1a;徕卡\索尼\三星\舜宇 被测对象3-【环境】取值有2种可能&#xff1a;白天\黑夜 问题&#xff1a;如何…

使用matlab求解常微分方程(组)问题

前言 介绍了常微分方程组的基本形式&#xff0c;并且介绍了matlab的数值和解析解法&#xff0c;以及给出了相应的案例。 前言1. 常微分方程组介绍1.1 一阶常微分方程组1.2 高阶常微分方程组1.2.1 形式1&#xff1a;单个高阶微分方程1.2.2 形式2&#xff1a;多个高阶微分方程组 …