从Arrays.asList返回的列表是否保持与原始数组集合相同的顺序?

15 java collections arraylist

我有一个我正在迭代几次的ArrayList,看起来它没有维持迭代的顺序.我看得更深,似乎为此迭代(由其他人)编写的自定义迭代器标记首先在ArrayList中传递并使用Arrays.asList在迭代之前将其桥接到Object []集合.迭代的顺序是否会丢失?是否与Arrays.asList一起预期?

编辑:

以下是操作对传递给iterator标记的原始集合的作用:

if(collection.getClass().isArray()) {
    iterator = Arrays.asList((Object[]) collection).iterator();
} else if(collection instanceof Collection) {
    iterator = ((Collection) collection).iterator();
} else if(collection instanceof Iterator) {
    iterator = (Iterator) collection;
} else if(collection instanceof Map) {
    iterator = ((Map) collection).entrySet().iterator();
}
Run Code Online (Sandbox Code Playgroud)

Pow*_*ord 10

List仍然由原始数组支持,因此项目的显示顺序与它们在数组中的顺序相同.

另外,请注意asList是一个通用方法,因此Arrays.asList(T[])将返回a List<T>.

至于另一个方向,List是的toArray

以适当的顺序(从第一个元素到最后一个元素)返回包含此列表中所有元素的数组.

有两种toArray方法.第一个返回a Object[],第二个返回一个数组作为其参数,并返回相同类型的数组.

像这样的东西并不罕见,使用String数组作为示例:

String[] y = x.toArray(new String[0]);
Run Code Online (Sandbox Code Playgroud)

(这个例子是从所拍摄的JavaDocList<E>)

  • @ hal10001:我觉得你很困惑......如果一个`ArrayList`被提供给你发布为`collection`的代码,它的`Iterator`将被直接使用,因为它是`Collection`的一个实例.如果为该代码提供了一个数组,那么`Arrays.asList`将用于将该数组桥接到`List`,而不是相反. (2认同)