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
英文地址,請注明出處:http://en.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…