Java——初始guava(1)

基于 Google Guava 官方教程的解答

📚 Guava 提供了哪些 JDK 不具备的 API?

Guava 扩展了 JDK 的集合框架,提供了多种 JDK 没有的实用 API:

  1. 不可变集合(Immutable Collections)

    • ImmutableListImmutableSetImmutableMap
    • 特性:创建后不可修改,线程安全,性能优于 Collections.unmodifiableXXX()
    // 创建方式
    ImmutableList<String> list = ImmutableList.of("A", "B", "C");
    ImmutableMap<String, Integer> map = ImmutableMap.of("k1", 1, "k2", 2);
    
  2. 新集合类型

    类型用途实现类
    Multiset元素可重复的集合(带计数)HashMultiset, TreeMultiset
    Multimap一键对应多个值(替代 Map<K, List<V>>ArrayListMultimap, HashMultimap
    BiMap键值双向唯一映射(inverse() 反转)HashBiMap, ImmutableBiMap
    Table二维表结构(行+列作为键)HashBasedTable, TreeBasedTable
    // Multimap 示例
    Multimap<String, String> multimap = ArrayListMultimap.create();
    multimap.put("语言", "Java");
    multimap.put("语言", "Python"); // 一键多值
    
  3. 缓存工具

    • CacheBuilder:构建高性能本地缓存(支持过期策略、弱引用等)
    Cache<String, Data> cache = CacheBuilder.newBuilder().maximumSize(1000).expireAfterWrite(10, TimeUnit.MINUTES).build();
    
  4. 函数式工具

    • Function/Predicate 接口 + Collections2.transform/filter
    List<String> upper = Lists.transform(list, String::toUpperCase);
    
  5. 字符串处理

    • Joiner:安全连接字符串(自动处理 null)
    • Splitter:灵活分割字符串
    String joined = Joiner.on("|").skipNulls().join("A", null, "B"); // "A|B"
    
  6. 原生类型增强

    • Ints, Longs 等工具类(如 Ints.tryParse()

🌟 简单介绍 Guava

Guava(Google Core Libraries for Java) 是 Google 开源的 Java 核心库:

  • 定位:增强 JDK 能力,提供 Google 内部项目验证的最佳实践
  • 特点
    • 填补 JDK 功能空白(如不可变集合、多维集合)
    • 强调代码健壮性(如强制空值检查 Optional
    • 高性能优化(如缓存工具比 ConcurrentHashMap 快 30%+)
    • 开发效率提升(减少模板代码)

📦 Guava 包含的主要内容

根据官方教程目录,Guava 分为 13 个模块:

模块核心功能
1. 基本工具Optional(空安全)、Preconditions(参数校验)、Ordering(排序)
2. 集合不可变集合、Multiset/Multimap/Table、集合工具类
3. 缓存CacheBuilder(本地缓存框架)
4. 函数式编程函数接口与集合操作(Java 8 前核心方案)
5. 并发ListenableFuture(异步回调)、Service(服务生命周期管理)
6. 字符串处理Splitter/Joiner/CharMatcher
7. 原生类型Ints/Longs 等基本类型工具
8. 区间Range(数学区间操作)
9. I/O简化 Java I/O 操作(如 Files/ByteStreams
10. 散列BloomFilter(布隆过滤器)、Hashing(哈希算法)
11. 事件总线EventBus(发布-订阅模式)
12. 数学运算优化数学计算工具
13. 反射TypeToken(泛型类型安全访问)

示例场景:使用 EventBus 解耦组件

// 发布者
eventBus.post(new OrderEvent(orderId));  // 订阅者
@Subscribe
public void handleOrderEvent(OrderEvent event) {// 处理事件
}

💎 总结

Guava 的核心价值在于:

  1. 填补 JDK 空白:提供 Multimap 等 JDK 缺失的集合类型
  2. 工程最佳实践:不可变集合/空安全设计等 Google 生产级方案
  3. 性能优化:缓存/集合工具等高性能实现
  4. 代码简洁:减少如 Map<K, List<V>> 的模板代码

官方建议优先使用:

// 替代 Collections.unmodifiableList()
ImmutableList.copyOf(mutableList); // 替代 Map<K, List<V>>
Multimap<Integer, String> multimap = ArrayListMultimap.create(); 

在 IntelliJ IDEA 中使用 Guava API & Gradle 依赖配置 & Guava 集合类型详解


一、在 IntelliJ IDEA 中使用 Guava API

步骤流程:
  1. 创建/打开项目
    通过菜单 File → New → Project 创建新项目(选择 Gradle

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

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

相关文章

day53

import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader, TensorDataset import numpy as np from sklearn.preprocessing import MinMaxScaler from sklearn.datasets import load_iris import warnings # 忽略不必要的警…

c++ python 共享内存

一、目的 是为了c来读取并解码传递给python&#xff0c;Python做测试非常方便&#xff0c;c 和 python之间必须定好协议&#xff0c;整体使用c 来解码&#xff0c;共享内存传递给python 二、主类 主类&#xff0c;串联decoder&#xff0c;注意decoder并没有直接在显存里面穿…

react函数组件的props,ref,state。

react开发我们会把页面分为一个个组件&#xff0c;组件是独立而且可复用的重复代码片段。具体来说组件可以是一个按钮&#xff0c;一个输入框。react组件有两种定义方法&#xff0c;一种是函数组件&#xff0c;一种是类组件。我们这里说一下函数组件之间父子之间如何传递props参…

基于ARM+FPGA实现的BISS-C协议解决方案,适用于高精度光栅位移传感器等

模块简介 本资源提供了专为FPGA设计的BISS-C接口协议发送模块源码。BISS-C模式作为一种高速、同步的串行通信协议&#xff0c;广泛应用于高精度光栅位移传感器的数据传输中&#xff0c;特别适用于需要精确位置信息的应用场景。此模式遵循主从架构&#xff0c;其中FPGA作为主控制…

spring中@Transactional注解和事务的实战理解附代码

文章目录 前言一、事务是什么&#xff1f;二、事务的特性2.1隔离性2.2事务的隔离级别 三、Transactional注解Transactional注解简介基本用法常用属性配置事务传播行为事务隔离级别异常处理与回滚性能优化建议 四、 事务不生效的可能原因方法访问权限非public自调用问题异常被捕…

替代进口SCA7606【智芯微】国产高精度电流传感器 工业新能源电网专用

SCA7606&#xff08;智芯微&#xff09;产品解析与推广文案一、产品概述SCA7606 是 智芯微电子&#xff08;ZXMICRO&#xff09; 推出的一款 高精度数字隔离式电流传感器芯片&#xff0c;采用 霍尔效应数字输出 技术&#xff0c;专为 工业控制、新能源、智能电网 等领域的电流检…

Java 与 Vue 全栈开发:“一课一得“ 学习笔记系统实战

一、项目背景与核心价值 "一课一得" 是一个面向学习者的笔记管理平台&#xff0c;旨在帮助用户系统化记录、整理和回顾学习内容。项目采用前后端分离架构&#xff1a;前端基于 Vue.js 构建交互式界面&#xff0c;后端使用 Java Spring Boot 实现业务逻辑&#xff0c…

百度文心大模型 4.5 开源深度测评:技术架构、部署实战与生态协同全解析

声明&#xff1a;本文只做实际测评&#xff0c;并非广告 1.前言 2025 年 6 月 30 日&#xff0c;百度做出一项重大举措&#xff0c;将文心大模型 4.5 系列正式开源&#xff0c;并选择国内领先的开源平台 GitCode 作为首发平台。该模型也是百度在2025年3月16日发布的自研的新一…

力扣_链表_python版本

一、206. 反转链表代码&#xff1a; class Solution:def reverseList(self, head):dummy ListNode()cur headwhile cur:last cur.nextcur.next dummy.nextdummy.next curcur lastreturn dummy.next二、92. 反转链表 IIclass Solution:def reverseBetween(self, head: Opt…

[netty5: WebSocketProtocolHandler]-源码分析

在阅读这篇文章前&#xff0c;推荐先阅读&#xff1a;[netty5: MessageToMessageCodec & MessageToMessageEncoder & MessageToMessageDecoder]-源码分析 WebSocketProtocolHandler WebSocketProtocolHandler 是 WebSocket 处理的基础抽象类&#xff0c;负责管理 Web…

[2025CVPR]一种新颖的视觉与记忆双适配器(Visual and Memory Dual Adapter, VMDA)

引言 多模态目标跟踪&#xff08;Multi-modal Object Tracking&#xff09;旨在通过结合RGB模态与其他辅助模态&#xff08;如热红外、深度、事件数据&#xff09;来增强可见光传感器的感知能力&#xff0c;尤其在复杂场景下显著提升跟踪鲁棒性。然而&#xff0c;现有方法在频…

理想汽车6月交付36279辆 第二季度共交付111074辆

理想汽车-W(02015)发布公告&#xff0c;2025年6月&#xff0c;理想汽车交付新车36279辆&#xff0c;第二季度共交付111074辆。截至2025年6月30日&#xff0c;理想汽车历史累计交付量为133.78万辆。 在成立十周年之际&#xff0c;理想汽车已连续两年成为人民币20万元以上中高端市…

MobileNets: 高效的卷积神经网络用于移动视觉应用

摘要 我们提出了一类高效的模型&#xff0c;称为MobileNets&#xff0c;专门用于移动和嵌入式视觉应用。MobileNets基于一种简化的架构&#xff0c;利用深度可分离卷积构建轻量级的深度神经网络。我们引入了两个简单的全局超参数&#xff0c;能够有效地在延迟和准确性之间进行…

SDP服务发现协议:动态查询设备能力的底层逻辑(面试深度解析)

SDP的底层逻辑揭示了物联网设备交互的本质——先建立认知,再开展协作。 一、SDP 核心知识点高频考点解析 1.1 SDP 的定位与作用 考点:SDP 在蓝牙协议栈中的位置及核心功能 解析:SDP(Service Discovery Protocol,服务发现协议)位于蓝牙协议栈的中间层,依赖 L2CAP 协议传…

CppCon 2018 学习:GIT, CMAKE, CONAN

提到的&#xff1a; “THE MOST COMMON C TOOLSET” VERSION CONTROL SYSTEM BUILDING PACKAGE MANAGEMENT 这些是 C 项目开发中最核心的工具链组成部分。下面我将逐一解释每部分的作用、常见工具&#xff0c;以及它们如何协同构建现代 C 项目。 1. VERSION CONTROL SYSTEM&am…

使用tensorflow的线性回归的例子(五)

我们使用Iris数据&#xff0c;Sepal length为y值而Petal width为x值。import matplotlib.pyplot as pltimport numpy as npimport tensorflow as tffrom sklearn import datasetsfrom tensorflow.python.framework import opsops.reset_default_graph()# Load the data# iris.d…

虚幻基础:动作——蒙太奇

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 动作——蒙太奇如果动作被打断&#xff0c;则后续的动画通知不会执行 动作——蒙太奇 如果动作被打断&#xff0c;则后续的动画通知不会执行

[工具系列] 开源的 API 调试工具 Postwoman

介绍 随着 Web 应用的复杂性增加&#xff0c;API 测试已成为开发中不可或缺的一部分&#xff0c;无论是前端还是后端开发&#xff0c;确保 API 正常运行至关重要。 Postman 长期以来是开发者进行 API 测试的首选工具&#xff0c;但是很多基本功能都需要登陆才能使用&#xff…

【力扣 简单 C】746. 使用最小花费爬楼梯

目录 题目 解法一 题目 解法一 int min(int a, int b) {return a < b ? a : b; }int minCostClimbingStairs(int* cost, int costSize) {const int n costSize; // 楼顶&#xff0c;第n阶// 爬到第n阶的最小花费 // 爬到第n-1阶的最小花费从第n-1阶爬上第n阶的花费…

python+django开发带auth接口

pythondjango开发带auth接口 # coding utf-8 import base64 from django.contrib import auth as django_authfrom django.core.exceptions import ObjectDoesNotExist from django.http import JsonResponsefrom sign.models import Eventdef user_auth(request):"&quo…