Возвращает ли список из массива 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[]