Guava 簡介:讓 Java 開發更高效

Guava 簡介:讓 Java 開發更高效

Guava 是由 Google 開源的 Java 庫,旨在為開發者提供一系列實用的工具類,以提高開發效率。它包含了集合類、緩存、并發工具、字符串處理等實用方法。

Guava 的常用場景

  1. 集合處理:Guava 提供了多種擴展的集合類,如 MultisetMultimapTable 等,這些類在處理復雜數據結構時非常有用。
  2. 緩存:Guava 的緩存機制可以幫助開發者輕松實現數據緩存,提高程序性能。
  3. 并發編程:Guava 提供了強大的并發工具,如 ListenableFuture,使得多線程編程更容易。
  4. 字符串處理:Guava 提供了方便的字符串工具類,如 JoinerSplitter,用于字符串的拼接和分割。

常用的 API

集合工具類

  • ImmutableList:不可變列表,用于防御性編程和性能提升。

    import com.google.common.collect.ImmutableList;
    ImmutableList list = ImmutableList.of("apple", "banana");
    
  • Multiset:可重復元素的集合。

    import com.google.common.collect.HashMultiset;
    HashMultiset multiset = HashMultiset.create();
    multiset.add("apple", 3);
    
  • Multimap:可重復鍵的映射。

    import com.google.common.collect.ArrayListMultimap;
    ArrayListMultimap multimap = ArrayListMultimap.create();
    multimap.put("fruit", "apple");
    multimap.put("fruit", "banana");
    
  • BiMap:雙向映射,鍵和值都不能重復。

    import com.google.common.collect.HashBiMap;
    HashBiMap bimap = HashBiMap.create();
    bimap.put("key1", "value1");
    

緩存

  • CacheBuilder

    :用于構建緩存,支持多種緩存策略。

    import com.google.common.cache.CacheBuilder;
    Cache cache = CacheBuilder.newBuilder().maximumSize(1000).expireAfterWrite(10, TimeUnit.MINUTES).build();
    

并發工具

  • ListenableFuture

    :支持回調的 Future,用于異步編程。

    import com.google.common.util.concurrent.ListenableFuture;
    import com.google.common.util.concurrent.ListeningExecutorService;
    ListeningExecutorService executor = MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor());
    ListenableFuture future = executor.submit(() -> "Hello, World!");
    Futures.addCallback(future, new FutureCallback() {@Overridepublic void onSuccess(String result) {System.out.println(result);}@Overridepublic void onFailure(Throwable t) {t.printStackTrace();}
    });
    

字符串處理

  • Joiner:用于字符串的拼接。

    import com.google.common.base.Joiner;
    String joined = Joiner.on(",").join(Arrays.asList("1", "2", "3"));
    
  • Splitter:用于字符串的分割。

    import com.google.common.base.Splitter;
    List parts = Splitter.on(",").splitToList("1,2,3");
    

其他工具

  • Preconditions:用于參數校驗。

    import com.google.common.base.Preconditions;
    Preconditions.checkNotNull(obj, "Object cannot be null");
    
  • Optional:用于處理可能為 null 的值。

    import com.google.common.base.Optional;
    Optional optional = Optional.fromNullable("Hello");
    if (optional.isPresent()) {System.out.println(optional.get());
    }
    

解決的問題

  1. 簡化代碼:Guava 提供了許多實用工具類,幫助開發者簡化代碼,提高可讀性和可維護性。
  2. 提高性能:通過緩存和并發工具,Guava 可以顯著提高程序的性能。
  3. 減少錯誤:Guava 的驗證機制和防御性編程方法有助于減少編碼錯誤。

示例:使用 Guava 緩存提高性能

假設我們有一個昂貴的數據庫查詢操作,我們可以使用 Guava 緩存來緩存查詢結果,以提高程序的性能。

import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;public class DatabaseQueryCache {private final LoadingCache cache;public DatabaseQueryCache() {cache = CacheBuilder.newBuilder().maximumSize(1000).expireAfterWrite(10, TimeUnit.MINUTES).build(new CacheLoader() {@Overridepublic String load(String key) {// Simulate an expensive database querytry {Thread.sleep(1000); // Wait for 1 second} catch (InterruptedException e) {Thread.currentThread().interrupt();}return "Result for " + key;}});}public String query(String key) {return cache.getUnchecked(key);}public static void main(String[] args) {DatabaseQueryCache cache = new DatabaseQueryCache();System.out.println(cache.query("key1")); // First query takes 1 secondSystem.out.println(cache.query("key1")); // Subsequent queries are instant}
}

示例:使用 Guava 的 Multimap 處理復雜數據結構

假設我們需要處理一個復雜的數據結構,其中一個鍵可以對應多個值,我們可以使用 Guava 的 Multimap 來實現。

import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;public class MultimapExample {public static void main(String[] args) {Multimap multimap = ArrayListMultimap.create();multimap.put("fruit", "apple");multimap.put("fruit", "banana");multimap.put("vegetable", "carrot");System.out.println(multimap.get("fruit")); // Output: [apple, banana]}
}

通過這些示例,我們可以看到 Guava 如何幫助我們簡化代碼、提高性能和減少錯誤。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/94660.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/94660.shtml
英文地址,請注明出處:http://en.pswp.cn/web/94660.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

「ECG信號處理——(24)基于ECG和EEG信號的多模態融合疲勞分析」2025年8月23日

目錄 一、引言 二、核心原理 2.1 心電 HRV 疲勞關聯原理 2.2 腦電 EEG 疲勞關聯原理 2.3 疲勞綜合指數 三、數據處理流程 四、結果展示與分析 參考文獻 一、引言 針對作業安全(如駕駛、精密操作)場景下的疲勞狀態實時監測需求,本文提…

EXCEL自動調整列寬適應A4 A3 A2

Public xlPaperA2%Sub 填滿頁面排版()xlPaperA2 66 A2編號66Dim ws As Worksheet: Set ws ActiveSheetDim FirstCol As Long, LastCol As Long, LastRow As LongDim TargetRange As RangeDim UsablePageWidth As DoubleDim CurrentWidth As DoubleDim StartFontSize As Doubl…

Linux系統性能優化全攻略:從CPU到網絡的全方位監控與診斷

引言 在Linux系統運維和開發過程中,系統性能優化是一個永恒的話題。無論是服務器負載過高,還是應用程序響應緩慢,準確快速地定位問題根源至關重要。本文將全面介紹Linux系統中常用的性能診斷工具和方法,幫助您從CPU、內存、磁盤I/…

uniapp+vue+uCharts開發常見問題匯總

項目結構:uniapp vue2 uni-ui uCharts 1、chunk-vendors.js:2765[Vue warn]: Invalid prop: custom validator check failed for prop "navigationBarTextStyle". 檢索發現原因: 在 pages.json 文件中,navigationBarTextStyle 屬…

【甲烷數據集】EPA-美國2012-2020年網格化甲烷清單

目錄 數據概述 數據特征 數據版本與年份 排放源類型(示例) 時間變化處理 數據下載 參考 根據美國環保署(EPA)官網 《U.S. Gridded Methane Emissions》頁面 的內容,以下是對 美國網格化甲烷清單(Gridded Methane GHGI) 的詳細介紹。 數據概述 EPA-U.S. Gridded Methan…

【溫室氣體數據集】NOAA CCGG 飛機觀測溫室氣體

目錄 數據集概述 采樣方式 測量氣體 數據用途 觀測站點 NOAA CCGG 飛機觀測站點信息 項目特色 數據訪問 參考 NOAA 全球監測實驗室(Global Monitoring Laboratory, GML)提供的 Carbon Cycle Greenhouse Gases Aircraft Program 數據集是一個關于溫室氣體在大氣中垂直分布的觀…

FreeRTOS,互斥量 (Mutex)

1. 信號量 (Semaphore) 通俗理解:信號量就像停車場的空位計數器。當有車進入時,計數器減1;當有車離開時,計數器加1。如果計數器為0,新車必須等待直到有空位。 #include "FreeRTOS.h" #include "semphr.…

SQL查詢-設置局部變量(PostgreSQL、MySQL)

😋博主在工作中編寫復雜SQL語句時,經常需要替換查詢值進行測試。所以需要用到局部變量設置,可以減輕測試時的壓力。 目錄使用場景1.常規寫法2.局部變量寫法(1)PostgreSQL示例注意事項(2)MySQL示…

2962 統計最大元素出現至少k次的子數組

2962 統計最大元素出現至少k次的子數組 文章目錄2962 統計最大元素出現至少k次的子數組1 題目2 解答1 題目 給你一個整數數組 nums 和一個 正整數 k 。 請你統計有多少滿足 「 nums 中的 最大 元素」至少出現 k 次的子數組,并返回滿足這一條件的子數組的數目。 子…

【Java SE】基于多態與接口實現圖書管理系統:從設計到編碼全解析

文章目錄一、系統整體設計:分層與職責劃分系統模塊結構二、核心模塊詳解:從數據到功能1. Book包:數據封裝1.1 Book類:圖書實體1.2 BookList類:書架管理2. User包:多態的核心體現2.1 User抽象類:…

ESP32-WSL開發環境搭建過程中遇到的問題及解決方案

文章目錄 應用場景: 問題1描述: 原因分析: 解決方案: 先檢查 ESP-IDF 工具鏈是否安裝完整 設定工具路徑變量一切正常: 執行重新運行安裝腳本后又報錯: 原因分析 解決方法: 第一步:安裝python3.10-venv包(核心修復) 第二步:重新執行 ESP-IDF 安裝腳本,重建虛擬環境 安…

SwiftUI 三陣訣:楊過絕情谷悟 “視圖布陣” 之道

📜 引子:絕情谷困境,三陣待辨 絕情谷外,瘴氣彌漫。楊過手握玄鐵劍(喻 Xcode),凝視谷中涌動的萬千 “毒物”(喻待渲染的視圖元素),眉頭緊鎖。 此前他試過硬闖…

以樓宇自控系統為核心,整合多維度技術,打造智能建筑解決方案

在數字化浪潮席卷建筑行業的當下,“智能建筑” 已從概念走向大規模落地,其核心訴求不再是單一設備的智能化,而是建筑整體的 “感知、分析、決策、執行” 閉環能力。傳統智能建筑常陷入 “技術堆砌” 困境 —— 暖通、安防、照明等系統各自為政…

阿里云服務器 篇一(加更):設置二級域名通配符證書

文章目錄 樣例網站 系列文章 域名注冊 為單個域名添加SSL證書 申請 通配符域名 + 根域名 證書 已申請通配符證書,補申請一個根域名證書 更改Nginx配置,統一使用通配符域名證書 替換所有https服務的證書為通配符證書 統一處理http請求跳轉https服務 對所有未定義二級域名的統一…

汽車電子工廠靜電腕帶監控儀雙回路設計降低設備采購成本

在汽車電子制造中,靜電放電(ESD)風險貫穿從PCB焊接、元件裝配到成品測試的全流程。在新能源汽車零部件產線中需處理大量精密電子組件,靜電隱患導致的典型問題包括:元件損傷:ESD瞬時電壓可能擊穿芯片或導致焊…

Linux操作系統—進程

進程(process):(1)進程的定義:正在進行的程序,會去分配內存資源(mem),cpu的調度 ,(flash ssd:固態硬盤)目的:為了實現并發,同一時刻執行多任務&am…

win11的WSL安裝CentOS9-Stream,并且安裝docker,使用第三方工具連接linux

前面寫了一個安裝centos8的文章,但是發現centos8有很多限制,很多東西不能用,于是果斷放棄 一、打開windows的虛擬機功能 自行百度 二、下載CentOS9-Stream系統 1、下載 地址:https://github.com/mishamosher/CentOS-WSL 請下…

TypeScript實戰:輕松實現數字序號轉中文大寫數字

在前端開發中,我們經常會遇到【將數字序號轉換為中文大寫數字】的需求——比如表單步驟條顯示“第一步”而非“第1步”、文章章節標題用“三”代替 “3”等。今天就帶大家拆解這個常見需求的實現思路,用TypeScript寫出簡潔又安全的轉換函數。 一、需求明…

【C++游記】棧vs隊列vs優先級隊列

楓の個人主頁 你不能改變過去,但你可以改變未來 算法/C/數據結構/C Hello,這里是小楓。C語言與數據結構和算法初階兩個板塊都更新完畢,我們繼續來學習C的內容呀。C是接近底層有比較經典的語言,因此學習起來注定枯燥無味&#xf…

2025年網絡安全技能競賽“觀安杯”管理運維賽 WEB/PWN WP

blindpwn尋找漏洞點上來先看到讓輸入的有長度和數據,其他先不管,測試一下長度,發現最大為16然后blind pwn一般的話有棧溢出和格式化字符串兩種,這里先測試一下格式化字符串然后就會發現啥也沒有,但是會發現一些事情有一…