Guava-ImmutableCollection

前言

经过前面几个基础点的学习,接着分析Guava中的核心,不可变集合,所有不变集合的父类为ImmutableCollection,其子类包括EntryCollectionImmutableSetImmutableListImmutableMultiSetImmutableMapValues等,现分析其源码。

ImmutableCollection

ImmutableCollection实现了JavaCollectionSerializable接口,其重写了Collection中的很多方法,针对更改集合类型的操作,如add方法,则直接抛出异常。

iterator方法

iterator方法会返回一个不可修改的UnmodifiableIterator,其实现了JavaIterator接口,并且重写了remove方法,直接抛出异常。

toArray方法

该方法可将集合转化为Array数组,具体会调用ObjectArrays类的fillArray方法,其会遍历集合,并将集合元素放在Object类型中的数组中,针对不同的集合实现也会重写该方法。

add方法

add方法会修改集合,由于为不可变集合,会直接抛出UpsupportedOperationException异常。

remove方法

add方法一样会修改集合,该方法也是不允许的,需要抛出异常。

asList方法

该方法将集合转化为List类型。

EmptyImmutableCollection类

该类表示空集合,不存在任何元素。

Builder类

Builder类用于构建ImmutableCollection,其通过add方法添加元素,并通过expandedCapacity进行扩容,最后需要调用build方法完成ImmutableCollection的构建。

总结

ImmutalbeCollection是所有不可变集合的父类,其定义了一些通用方法,在具体子类中对某些方法需要重写。