java集合框架与guava的扩展增强

Java Collections Framework是每个javaer必知必会的,只有深入了解集合框架,才能写出健壮且优雅的代码。当然java集合框架也不是三两句话能讲清楚的,不论是从数据结构,算法还是设计模式,都有许多值得深入研究的地方,除了jdk原生的实现,许多第三方库也对集合框架做了很多扩充,比如,现在公司广泛使用的guava

原生集合框架

google了两张张关于java集合框架的概览图,宏观了解,慢慢消化。

对于一些工作中经常使用的集合,收集了一些比较好的blog(有图有真相,品质不错,适合收藏)

List
java中的ArrayList,List,LinkedList,Collection关系详解
极客学院-List总结
[Java集合深入理解(4):List接口](http://blog.csdn.net/u011240877/article/details/52802849#)

Map
Oracle Java Map集合类简介
JDK7与JDK8中HashMap的实现
图解HashMap和HashSet的内部工作机制
Java8系列之重新认识HashMap
谈谈HashMap线程不安全的体现

Set
HashSet vs. TreeSet vs. LinkedHashSet
Java HashSet工作原理及实现
如何用Map对象创建Set对象

并发集合
java.util.concurrent - Java Concurrency Utilities (很全面但不深入,可以作为目录)
ConcurrentHashMap总结
Java并发工具包java.util.concurrent用户指南 ConcurrentHashMap原理分析
并发队列-无界非阻塞队列 ConcurrentLinkedQueue 原理探究
并发队列 – 无界阻塞队列 LinkedBlockingQueue 原理探究

Guava Collections

Guava对原生集合框架的扩展在四个方面

1. Immutable collections

不可变集合从线程安全性,空间利用率,编码安全等方面来说,都有很大的优势,因此,guava给jdk原生集合和guava新增的集合都提供了Immutable的实现。如果你没有修改某个集合的需求,或者希望某个集合保持不变时,把它防御性地拷贝到不可变集合是个很好的实践。
https://github.com/google/guava/wiki/ImmutableCollectionsExplained
http://ifeve.com/google-guava-immutablecollections/

2. New collection types

包括Multiset,Multimap,BiMap,Table,ClassToInstanceMap,RangeMap,RangeSet。在之前的工作中,使用过Multiset,Multimap做过计数和分组,相当好用,代码简洁功能强大,避免了新建辅助的数据结构或者写出类似Map<K, Set<V>>这样不优雅的代码,之前做过一个很复杂的价格区间的处理需求,准备写个线段树处理的,最后发现,RangeMap几行代码就搞定了。
https://github.com/google/guava/wiki/NewCollectionTypesExplained
http://ifeve.com/google-guava-newcollectiontypes/

3. Utilities

类似于java.util.Collections包含的工具方法。guava对原生集合以及扩展的新集合类提供了更多的工具方法,适用于所有集合的静态方法,比如,平常用得很多的静态工厂方法,支持链式调用的Iterables,针对每种不同类型的数据结构,对应的工具类提供了可能用到的各种静态方法,如集合的反转,分割,交并补操作等。
https://github.com/google/guava/wiki/CollectionUtilitiesExplained
http://ifeve.com/google-guava-collectionutilities/

4. Extension Utilities

扩展集合工具提供了对集合的更高级操作,比如使用装饰器模式做一些个性化操作,实现自己的定制的迭代器等。
https://github.com/google/guava/wiki/CollectionHelpersExplained
http://ifeve.com/google-guava-collectionhelpersexplained/

如果觉得我的文章对您有用,请在支付宝公益平台找个项目捐点钱。 @sxzhou Dec 31, 2017

奉献爱心