guava是什么意思英语 guava是什么水果


guava是什么意思英语 guava是什么水果


Google Guava 概述
1、Guava 是一组来自 Google 的核心 Java 库,包括新的集合类型(如 multimap 和 multiset)、不可变集合、图形库以及用于并发、I/O、散列、缓存、原语、字符串等的实用程序!被广泛应用于 Google 的大多数 Java 项目中,也被许多其他公司广泛使用 。
2、guava github 开源地址:GitHub – google/guava: https://github.com/google/guava
3、官网用户手册:https://github.com/google/guava/wiki
4、com.google.guava 依赖:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>29.0-jre</version>
</dependency>
不可变集合与对象
1、制作对象的不可变副本是一种很好的防御性编程技术,不可变对象有许多优点,包括:
可供不受信任的库安全使用 。线程安全:可由多个线程使用,无争用风险 。不需要支持突变,并且可以节省时间和空间,所有不可变的集合实现都比它们的可变同级更节省内存 。可以用作常数,并期望它将保持不变 。
2、要点:每个 Guava 不可变集合实现都拒绝 null 值 。Guava 的设计上推荐使用 null 值,大多数情况下,遇到 null 值会抛异常.
3、一个不可变的 ImmutableXxx 集合可以通过以下几种方式创建:
使用 copyOf 方法,如 ImmutableSet.copyOf(set)使用 of 方法, 如 ImmutableSet.of("a", "b", "c") 或 ImmutableMap.of("a", 1, "b", 2)使用 Builder 方法, 。
4、Guava 为 java jdk 每种标准集合类型提供了简单易用的不可变版本,包括 Guava 自己的集合变体,为 java 提供的不可变版本都是继承 java jdk 的接口而来,所以操作上基本无异 。下面接口的实现类也都有对应的不可变版本 。
接口JDK 或者 Guava不可变版本
在线演示源码:https://github.com/main/java/com/wmx/guava/ImmutableCollectionTest.java
官网文档:https://github.com/google/guava/wiki/ImmutableCollectionsExplained
Guava 新集合类型
1、Guava 引入了许多新的集合类型,这些类型不在 Java JDK 中,但却非常有用,这些都是为了与 JDK 集合框架愉快地共存而设计的,而不是将东西塞进 JDK 集合抽象中 。
Multiset 可重复集合
1、Guava 提供了一个新的集合类型 Multiset,它支持添加多个相同的元素,其中成员可以出现不止一次 。
2、Multiset 相当于 Set,区别在于 Multiset 可添加相同的元素,它的内部使用一个 HashMap 来维护,
3、Multiset 也有自己的实现类,常用的有 HashMultiset、LinkedHashMultiset、TreeMultiset 等,HashMultiset 、TreeMultiset 是无序的,LinkedHashMultiset 是有序的,操作完全同理 JDK 的 HashSet、TreeSet、LinkedHashSet 。
在线演示源码:https://github.com/wangmaoxiong/apache-study/blob/master/src/main/java/com/wmx/guava/MultisetTest.java
Multimap 多重映射
1、每个有经验的 Java 程序员都曾在某个地方实现过 Map<K、List<V>> 或 Map<K、Set<V>>,Guava 的 Multimap 框架使处理从键到多个值的映射变得容易,多重映射是将键与任意多个值关联的一种通用方法 。
2、从概念上讲,有两种方法可以将多重映射视为从单个键到单个值的映射的集合:
3、Multimap 提供了多种实现:
Multimap实现 key 使用的是value 使用的是ArrayListMultimapHashMapArrayListHashMultimapHashMapHashSetLinkedListMultimap *LinkedHashMap*LinkedList*LinkedHashMultimap**LinkedHashMapLinkedHashSetTreeMultimapTreeMapTreeSetImmutableListMultimapImmutableMapImmutableListImmutableSetMultimapImmutableMapImmutableSet
4、除了不可变的实现之外,每个实现都支持空键和值 。并不是所有的实现都是作为一个Map<K,Collection<V>>实现的(特别是一些Multimap实现使用自定义哈希表来最小化开销 。)

推荐阅读