前言
经过前面几个基础点的学习,接着分析
Guava
中的核心,不可变集合,所有不变集合的父类为ImmutableCollection
,其子类包括EntryCollection
、ImmutableSet
、ImmutableList
、ImmutableMultiSet
、ImmutableMapValues
等,现分析其源码。
ImmutableCollection
ImmutableCollection
实现了Java
的Collection
和Serializable
接口,其重写了Collection
中的很多方法,针对更改集合类型的操作,如add
方法,则直接抛出异常。
iterator方法
iterator
方法会返回一个不可修改的UnmodifiableIterator
,其实现了Java
的Iterator
接口,并且重写了remove
方法,直接抛出异常。
toArray方法
该方法可将集合转化为
Array
数组,具体会调用ObjectArrays
类的fillArray
方法,其会遍历集合,并将集合元素放在Object
类型中的数组中,针对不同的集合实现也会重写该方法。
add方法
add
方法会修改集合,由于为不可变集合,会直接抛出UpsupportedOperationException
异常。
remove方法
同
add
方法一样会修改集合,该方法也是不允许的,需要抛出异常。
asList方法
该方法将集合转化为
List
类型。
EmptyImmutableCollection类
该类表示空集合,不存在任何元素。
Builder类
Builder
类用于构建ImmutableCollection
,其通过add
方法添加元素,并通过expandedCapacity
进行扩容,最后需要调用build
方法完成ImmutableCollection
的构建。
总结
ImmutalbeCollection
是所有不可变集合的父类,其定义了一些通用方法,在具体子类中对某些方法需要重写。