前言
经过前面几个基础点的学习,接着分析
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是所有不可变集合的父类,其定义了一些通用方法,在具体子类中对某些方法需要重写。