老司机阿粉带你玩转 Guava 集合类(一)

简介: 日常开发中,阿粉经常需要用到 Java 提供集合类完成各种需求。Java 集合类虽然非常强大实用,但是提供功能还是有点薄弱。举个例子,阿粉最近接到一个需求,从输入一个文档中,统计一个关键词出现的次数。代码如下:

日常开发中,阿粉经常需要用到 Java 提供集合类完成各种需求。Java 集合类虽然非常强大实用,但是提供功能还是有点薄弱。

举个例子,阿粉最近接到一个需求,从输入一个文档中,统计一个关键词出现的次数。代码如下:64.jpg

虽然这个需求使用 Map 可以轻松搞定,但是阿粉还是觉得这种写法有点笨拙,如果没有判空,将会导致 NPE 异常。

如果很多地方需要功能,我们就可以抽象出来,将其封装成工具类。

不过上面的功能大家就不需要自己封装,一款来自 Google 开源工具类-Guava,可以轻松的解决上面的统计问题。

Guava 介绍

Guava 是一款 Google 开源工具类,包含许多 Google 内部 Java 项目依赖的核心类。Guava 扩展 Java 基础类工程,比如集合,并发等,也增加一些其他强大功能,比如缓存,限流等功能。

另外 Guava 推出一些类,如 Optional,甚至被 Java 开发者学习,后续增加到 JDK 中。

目前 Guava Github 仓库已有 36k star,可以见到 Guava 受欢迎程度。

65.jpg

Guava 核心功能包括多个模块,今天阿粉主要带大家玩转 Guava 集合类。

扩展集合类

Guava 创造很多 JDK 没有,但是我们日常却明显有用的新集合类型。这些新类型使用 JDK 集合接口规范,所以使用方法与 JDK 集合框架差不多,并没有增加很多使用难度。

Multiset

阿粉第一次见到 Multiset 这个类,还以为是 Set 接口子类。实际上此『Set』,仅仅只是数学上集合概念。

Multiset 继承 JDK Collection 接口,我们可以多次增加相同的元素,另外 Multiset 最大特定将会为元素计数,我们可以将它类似等同为 Map<E, Integer>

使用 Multiset可以轻松解决开头的问题。

66.jpg

使用 Multiset 简化了代码,并且再也不用担心新 NPE 的问题。

跟 JDK 集合类一样,Multiset也有许多子类。

66.jpg来源于 Github

这里阿粉提醒一下大家,虽然上面说过我们可以将 Multiset<E> 看做 Map<E, Integer>,但是 Multiset 可不是 Map 的子类,它可是 血统纯正的 Collection 子类。

相关文章
|
2月前
|
安全 Java 容器
【Java集合类面试二十七】、谈谈CopyOnWriteArrayList的原理
CopyOnWriteArrayList是一种线程安全的ArrayList,通过在写操作时复制新数组来保证线程安全,适用于读多写少的场景,但可能因内存占用和无法保证实时性而有性能问题。
|
2月前
|
存储 安全 Java
Java集合类面试十七】、介绍一下ConcurrentHashMap是怎么实现的?
ConcurrentHashMap在JDK 1.7中通过分段锁实现线程安全,在JDK 1.8中则采用Node数组配合链表和红黑树,并使用Synchronized和CAS操作提高并发性能。
Java集合类面试十七】、介绍一下ConcurrentHashMap是怎么实现的?
|
2月前
|
Java
【Java集合类面试二十一】、请介绍TreeMap的底层原理
TreeMap基于红黑树实现,能够根据键的自然顺序或提供的Comparator排序,其基本操作的时间复杂度为O(log N)。
|
2月前
|
Java
【Java集合类面试二十】、请介绍LinkedHashMap的底层原理
LinkedHashMap的底层原理是在HashMap的基础上,通过维护一条双向链表来保持键值对的插入和遍历顺序,同时继承HashMap的多数方法并重写部分方法以维护链表。
|
2月前
|
Java
【Java集合类面试十九】、说一说你对LinkedHashMap的理解
LinkedHashMap通过维护一个双向链表来保证key-value对的迭代顺序与插入顺序一致,它提供了HashMap的性能和有序迭代的特性,但相比HashMap性能略低。
|
5月前
|
设计模式 搜索推荐 Java
面试官不按套路出牌,上来就让聊一聊Java中的迭代器(Iterator ),夺命连环问,怎么办?
面试官不按套路出牌,上来就让聊一聊Java中的迭代器(Iterator ),夺命连环问,怎么办?
40 0
|
存储 缓存 安全
杰哥教你面试之一百问系列:java集合
集合是我们在java中经常会用到的东西,熟悉了集合我们就熟悉了java。当面试官在Java面试中涉及到Java集合的问题时,通常会涉及到集合的概念、类型、常见操作、性能等方面的内容。
|
存储 安全 算法
【面试常问】谈谈你对集合框架的理解?
在面试中被问到这个问题该咋么回答呢?这个问题是我认为最难回答的一个问题,原因就他问的范围太大了不知道该咋么回答;就我而言遇到这种问题首先给他说个总的,从最大的开始说起,在说一下里面包含的东西,包括里面的区别;如果你理解到位了也可以说一下底层的实现那么这时候面试官的眼睛就亮了;下面是我的思路可以参考一下,如有错误还请个位指正!
148 0
|
存储 Java 索引
“速通“ 老生常谈的HashMap [实现原理&&源码解读]
HashMap在现在已然成为了一个老生常谈的话题, 不管是正在学java的小白还是不断跳槽升值的老鸟, 在面试中HashMap几乎不可避免的会被问到, 你可以不被问到, 但你不能不会, 本篇文章的内容就是HashMap的实现原理和源码解读, 各位观众老爷们一起来看看吧
118 1
|
存储 安全 算法
29. Java集合框架 10 连问,你有被问过吗?
29. Java集合框架 10 连问,你有被问过吗?
93 0
29. Java集合框架 10 连问,你有被问过吗?