java - Java Collections.unmodificCollection 是否保留底层集合的顺序?

标签 java collections

我假设集合中不可修改的方法返回底层集合的 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/

相关文章:

java - 如何在JUnit 5中实现JUnit 4参数化测试?

java - 具有 hibernate 和超时等待空闲对象异常的tomcat数据源

scala - 如何在 Scala 中创建具有有界类型参数的自定义 Seq?

database - 从 mongodb 集合中获取最后一条记录

java - 为什么 ImmutableList.of() 和 friend 禁止空元素?

java - TestObserver 未在单元测试中获取数据

java - 如何将嵌套枚举与 Java 类型删除结合使用

java - 如何使用Java从属性文件中选取一组随机值?

c# - 我如何连接两个具有相同基类的不同列表<T>?

java - 检查 Java : which is the best method? 中的集合是否为空