gpt4 book ai didi

java - 扩展 ImmutableCollection

转载 作者:搜寻专家 更新时间:2023-11-01 01:53:29 25 4
gpt4 key购买 nike

我想构建一个传递迭代器和大小的数据模型,基本上是一种迭代结果集元素的只读方式。

我认为扩展 ImmutableCollection 并实现 size() 和 iterator() 是最好的做法,因为这种类型充分传达了我的意图。

不幸的是,ImmutableCollection 有一个包私有(private)的 isPartialView。

我的问题:为什么 isPartialView 是包私有(private)的,它是否应该保持私有(private)?如果是,那么对我的只读集合建模的最佳方式是什么?我应该创建一个只有 size() 和 iterator() 方法的自定义类型(一个 SizedIterable)吗?对于这个用例还有其他建议吗?

最佳答案

如果不是因为性能问题,我建议你不要尝试创建另一个 Collection 实现。 Java 已经通过 Collections.unmodifiableCollection() 提供了集合的只读 View 。方法。如果您想继续使用 Guava,ImmutableListImmutableSetImmutableMap 是您想要查看的类。要确定大小,您可以使用 Iterables.size()来自 Guava 的方法。

如果存在性能问题,则使用 ForwardingCollectionUnmodifiableIterator 实现该方案可能是有利的。示例:

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());
}
}

假设 addAllremoveAll 未被使用,或者它们通过 addremove 调用,其中可以根据委托(delegate)方法的返回值实现内务管理。但有其他限制,例如如果仅用于列表,则可以优化 addAll

关于java - 扩展 ImmutableCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18281253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com