我假设集合中不可修改的方法返回底层集合的视图或外观。这似乎是不言而喻的,它将unmodifiableList使用底层列表的顺序,并且unmodfiableSet可以自由地执行任何操作,因为没有顺序。
我使用的LinkedHashSet是一个集合,但确实保留了顺序,并且试图公开保留底层顺序的集合的不可修改的视图。使用unmodifiableSet似乎不合适,但我不能使用unmodifiableList。我无法找到unmodifiableCollection将使用底层集合中的任何排序的保证,尽管我怀疑它会。
有人可以向我指出定义此行为或与之相矛盾的规范吗?
对 的调用Collections.unmodifiableXXX只是创建一个薄包装器,该包装器在进行变异方法调用时抛出异常。所有其他方法调用都会进入底层集合,因此除了原始集合之外,没有其他任何东西会影响排序或其他事物。
包装器没有状态,它仅具有对底层集合的引用。
整个UnmodifiableSet包装器非常小,并且由于迭代器(继承自UnmodifiableCollection)使用底层集合中的迭代器(除了它覆盖remove()),因此迭代顺序与原始集合中的迭代顺序完全相同。
static class UnmodifiableSet<E> extends UnmodifiableCollection<E>
implements Set<E>, Serializable {
private static final long serialVersionUID = -9215047833775013803L;
UnmodifiableSet(Set<? extends E> s) {super(s);}
public boolean equals(Object o) {return o == this || c.equals(o);}
public int hashCode() {return c.hashCode();}
}
Run Code Online (Sandbox Code Playgroud)