请添加其他不可变集合类型,例如ImmutableDeque
。
[google/guava]添加其他不可变集合类型,例如 ImmutableDeque
回答
鉴于 ImmutableDeque 是不可变的,因此不存在诸如添加/弹出等操作,那么它相对于 ImmutableList 有什么优势?
这是个好问题。
@rgoldberg,您的具体用例是什么?
我想要一个可以重复使用的不可变空 Deque,而不是创建新的空 Deque,或者必须确保已保存的 Deque 永远不会被修改。我对非空 Deque 使用 ArrayDeques。
一个不可变的空 Deque 可以直接从方法中返回,而无需公开 ImmutableDeque 类,但如果它扩展了 ImmutableCollection / 被注释为 @Immutable / 被命名为 ImmutableDeque 以进行静态分析和代码理解,那就不会有什么坏处了。
我不认为有任何直接需要非空 ImmutableDeques,但也许其他人会有一个用例,他们只调用非变异 Deque 方法(如 descendingIterator())。我怀疑这样的情况很少(甚至没有)。我的主要关注点只是一个划定的不可变空 Deque,但我不想限制请求,也不想让它过于复杂。
如果这只是为了避免出于性能原因创建新的空双端队列,我认为这不足以成为整个不可变类型的理由,因为您不会声明返回该类型的方法。
您是否频繁返回空双端队列,以至于这是一个真正的性能问题?
我没有进行过性能测试。我只是尽量在非必要的情况下不创建新对象。
由于双端队列只有在改变时才比列表更有用,所以我认为我们不应该添加类型ImmutableDeque
。但是,如果您只想要一个不可变的空双端队列,则可以创建一个简单的类,该类可以扩展AbstractQueue
并实现在适当的情况下Deque
抛出或返回null
。
与此同时,我现在要关闭它。如果您有其他用例表明更需要ImmutableDeque
或其他不可变类型,请重新打开。