我假设集合中不可修改的方法返回底层集合的 View 或外观。不言而喻,unmodifyingList
将使用底层列表的顺序,而 unmodfiableSet
可以自由地执行任何操作,因为没有顺序。
我正在使用一个LinkedHashSet
,它是一个集合,但保留了顺序,并且试图公开保留底层顺序的集合的不可修改的 View 。使用 unmodifyingSet
似乎不合适,但我不能使用 unmodifyingList
。我无法保证 unmodifyingCollection
将使用底层集合中的任何顺序,尽管我怀疑它会。
任何人都可以向我指出定义此行为或与之相矛盾的规范吗?
最佳答案
对Collections.unmodifyingXXX
的调用只是创建一个瘦包装器,当进行变异方法调用时,该包装器会抛出异常。所有其他方法调用都会进入底层集合,因此除了原始集合之外,没有其他任何东西会影响排序或其他事物。
包装器没有状态,它仅具有对底层集合的引用。
整个UnmodifyingSet
包装器非常小,并且迭代器(继承自UnmodifyingCollection
)使用底层集合中的迭代器(除了它覆盖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();}
}
关于java - Java Collections.unmodificCollection 是否保留底层集合的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43251990/