Возвращает ли список из массива Arrays.asList тот же порядок, что и исходная коллекция массивов?

У меня есть ArrayList, который я повторяю несколько раз, и похоже, что он не поддерживает порядок итераций. Я выглядел глубже, и кажется, что пользовательский тег итератора, который был написан для этой итерации (кем-то другим), сначала принимает переданный в ArrayList и использует Arrays.asList, чтобы связать его с коллекцией Object [] перед итерацией. Утерян ли порядок итерации? Ожидается ли это с помощью массива Arrays.asList?

EDIT:

Вот что делает операция с исходной коллекцией, переданной в тег итератора:

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();
}

Ответы

Ответ 1

Список по-прежнему поддерживается исходным массивом, поэтому элементы должны отображаться в том же порядке, что и в массиве.

Также обратите внимание, что asList - это общий метод, поэтому Arrays.asList(T[]) вернет List<T>.

Что касается другого направления, List toArray

Возвращает массив, содержащий все элементов в этом списке последовательность (от первого до последнего элемента).

Существует два метода toArray. Первый возвращает Object[], второй принимает массив как свой аргумент и возвращает как массив того же типа.

Что-то вроде этого не редкость, используя в качестве примера массив String:

String[] y = x.toArray(new String[0]);

(Этот пример взят из JavaDoc для List<E>)

Ответ 2

Возможно, где итерация отменяется, если collection является Map

 else if(collection instanceof Map) {
    iterator = ((Map) collection).entrySet().iterator();
}

Если collection - это HashMap, порядок элементов коллекции действительно выкинут из окна.

Если collection является TreeMap, должен поддерживать порядок сбора, основываясь на сортировка. Однако, если вы создадите TreeMap из массива объектов Comparable, вы не должны ожидать массив и TreeMap должен иметь тот же порядок, поскольку TreeMap будет сортировать содержимое массива.

И вы также можете получить еще один collection, который будет гадать с таким порядком, как HashSet, PriorityQueue и т.д.

Однако, если collection никогда не является Картой и всегда является массивом, Arrays.asList должен поддерживать порядок. Мое лучшее предположение заключается в том, что ваши проблемы лежат либо вне фрагмента кода, либо в одном из случаев, кроме того, где вы передали массив.

Ответ 3

Вы можете сделать эту более общую замену Collection на Iterable.

} else if(collection instanceof Iterable) {
    iterator = ((Iterable) collection).iterator()

Примечание: примитивные массивы вроде int[].class.isArray() == true, но их нельзя отличить с помощью Object[]