专栏名称: java一日一条
主要是讲解编程语言java,并且每天都推送一条关于java编程语言的信息
目录
相关文章推荐
51好读  ›  专栏  ›  java一日一条

为什么强烈推荐Java程序员使用Google Guava编程

java一日一条  · 公众号  · Java  · 2019-07-23 18:41

正文

请到「今天看啥」查看全文


guava提供了Bytes/Shorts/Ints/Iongs/Floats/Doubles/Chars/Booleans这些基本数据类型的扩展支持,只有你想不到的,没有它没有的!

对JDK集合的有效补充

灰色地带:Multiset

JDK的集合,提供了有序且可以重复的List,无序且不可以重复的Set。 那这里其实对于集合涉及到了2个概念,一个order,一个dups。 那么List vs Set,and then some ?


Multiset

Multiset是什么,我想上面的图,你应该了解它的概念了。 Multiset就是无序的,但是可以重复的集合,它就是游离在List/Set之间的“灰色地带”! (至于有序的,不允许重复的集合嘛,guava还没有提供,当然在未来应该会提供UniqueList,我猜的,哈哈)

来看一个Multiset的示例:


Multiset Code

Multiset自带一个有用的功能,就是可以跟踪每个对象的数量。

Immutable vs unmodifiable

来我们先看一个unmodifiable的例子:


unmodifiable

你看到JDK提供的unmodifiable的缺陷了吗? 实际上,Collections.unmodifiableXxx所返回的集合和源集合是同一个对象,只不过可以对集合做出改变的API都被override,会抛出UnsupportedOperationException。 也即是说我们改变源集合,导致不可变视图(unmodifiable View)也会发生变化,oh my god!

当然,在不使用guava的情况下,我们是怎么避免上面的问题的呢?


defensive copies

上面揭示了一个概念: Defensive Copies,保护性拷贝。







请到「今天看啥」查看全文