2013-03-05 54 views
0

Collections.unmodifiableSet允许我创建集的不可修改的视图。我假设这是通过包装提供的集合来完成的。如果不可修改的集合是由已经不可修改的集合创建的,是否会有任何性能问题?从不可修改的集创建不可修改的集

例如

Set<String> set = Collections.unmodifiableSet(Collections.unmodifiableSet(Collections.unmodifiableSet(new HashSet<String>()))); 

回答

0

Collections.unmodifiableSet - 只是用UnmodifiableSet实例包装一个集合,它只是代理所有的方法调用。额外的有限方法调用序列不是性能考虑的主题,当然如果你不是在谈论数千个包装。

0

的方法签名是:

public static <T> Set<T> unmodifiableSet(Set<? extends T> s) { 
    return new UnmodifiableSet<T>(s); 
} 
在类 Collections

。其返回对象UnmodifiableSet的新实例。现在,这个类是内部静态类:

static class UnmodifiableSet<E> extends UnmodifiableCollection<E> implements Set<E>, Serializable 

在类UnmodifiableCollectionaddremoveaddAllthrows UnsupportedOperationException方法。这就是为什么它是Unmodifiable

现在,如果你实例化数千次当然是一个集合问题。