vps网站目录是灰色的,lnmp wordpress ssl,东莞哪里有做网站的,西安紧急通知前些天发现了一个巨牛的人工智能学习网站#xff0c;通俗易懂#xff0c;风趣幽默#xff0c;忍不住分享一下给大家。点击跳转到教程。
ImmutableCollection代码定义
GwtCompatible(emulatedtrue)
public abstract class ImmutableCollectionE extends AbstractCo…前些天发现了一个巨牛的人工智能学习网站通俗易懂风趣幽默忍不住分享一下给大家。点击跳转到教程。
ImmutableCollection代码定义
GwtCompatible(emulatedtrue)
public abstract class ImmutableCollectionE extends AbstractCollectionE implements Serializable ImmutableCollection表示内容不可更改的集合并提供以下额外特性的担保。 注意应当避免直接使用ImmutableCollection作为一个类型就如同避免直接使用Collection本身一样。最好使用其子类例如ImmutableSet或ImmutableList因为子类拥有更好的Object.equals(java.lang.Object) 语义可以从源头避免常见的bug和错误。 以下文档适用于com.google.common.collect包中所有公开的不可变类型不论是否是ImmutableCollection的子类。
保证特性
浅不可变
浅不可变是指值是不可写的但是如果是对象的引用的值是可被改变的。不能对不可变集合的元素进行增加、移除或者替换。这是比Collections.unmodifiableCollection 更严格的保证因为这个集合的内容会随其包装集合的改变而改变。
不可为Null
本集合不能包含null元素。
确定性的迭代
元素迭代顺序是被定义的取决于集合的创建细节可以参考对应的工厂方法。除非另外注明集合视图例如ImmutableMultiset.elementSet()的迭代顺序与父集合一样。
线程安全
多线程并发访问集合是安全的。
完整性
本类型不能在除com.google.common.collect包以外被继承。因为这有可能违反以上担保特性。
接口而非实现
每一个公开的类例如ImmutableSet都是一个提供具体功能行为保证的类型而不仅仅是在某种特定的实现例如ArrayList。对类型名称的含义都应当理解为是接口而非实现。
属性类型和方法返回类型通常都应当使用不可变类型例如ImmutableList而不是一般的集合接口例如List。这样便于告知调用者以上对于类型的保证特性这是非常有用的信息。
另一方面直接将ImmutableList作为参数类型并不令人满意。解决方案是接受Iterable类型参数通过方法或构造器将它传递给相应的copyOf方法。
创建
除了逻辑层面的抽象类例如ImmutableCollection每个不可变类型都提供了或者此类型实例的静态方法。最常用的有 1、静态方法of接受一个显示的元素或条目列表。 2、静态方法copyOf或者copyOfSorted接受一个内容可被复制的已存在的集合。 3、嵌套的静态类Builder它可以用来填充一个新的不可变实例。
警告
如任何集合一样改变集合中的元素这种改变影响了Object.equals(java.lang.Object)的行为是一种错误的做法。他会引起未定义的行为和bug。通常最佳实践是完全避免使用可变对象作为集合元素虽然许多用户认为不可变对象是深不可变的deeply immutable。
性能说明
1、集合的实现通常优先考虑内存效率然后是访问速度最后是创建速度。 2、copyOf方法有时会认为没有必要进行实际复制操作例如copyOf(copyOf(anArrayList))只会复制一次。这减少了在API边界习惯性地创建防御副本的代价。但是跳过拷贝操作的精确情况是未定义的。 3、警告视图集合例如ImmutableMap.keySet或ImmutableList.subList(int,int)会保留对整个数据集合的引用以防止其被垃圾收集。如果其中一些数据通过其他方式不再可用这可能会产生内存泄漏。可通过传递视图集合给适当的copyOf方法以获得正确大小的拷贝。 4、与创建可变集合并拷贝相比使用相应关联的Builder类并不会降低性能有可能会更好。 5、通常实现不会缓存hash code。如果元素或键类型的hashCode实现较慢它应当自己实现缓存。
使用示例
class Foo {private static final ImmutableSetString RESERVED_CODES ImmutableSet.of(AZ, CQ, ZX);private final ImmutableSetString codes;public Foo(IterableString codes) {this.codes ImmutableSet.copyOf(codes);checkArgument(Collections.disjoint(this.codes, RESERVED_CODES));}}