如果不是出于性能问题,我建议您不要尝试创建另一个 Collection 实现。Collections.unmodifiableCollection()
Java 已经通过该方法提供了集合的只读视图。如果您想继续使用 Guava,则ImmutableList
和ImmutableSet
是ImmutableMap
您要检查的课程。要确定大小,您可以使用Iterables.size()
Guava 中的方法。
如果存在性能问题,则使用ForwardingCollection
和实施该方案UnmodifiableIterator
可能是有利的。例子:
public static class CollectionWithUnmodifiableIterator<E> extends ForwardingCollection<E> {
private final Collection<E> collection;
public CollectionWithUnmodifiableIterator(final Collection<E> collection) {
this.collection = collection;
}
@Override
protected Collection<E> delegate() {
return collection;
}
@Override
public Iterator<E> iterator() {
return Iterators.unmodifiableIterator(super.iterator());
}
}
缓存大小也是可能的,假设addAll
andremoveAll
没有被使用,或者它们通过add
andremove
调用汇集,其中可以根据委托方法的返回值实现内务管理。但是有其他限制,例如,如果仅用于列表,则addAll
可以优化。