Подтвердить что ты не робот

Порядок поиска списка массивов

У меня есть java ArrayList, к которому я добавляю 5 объектов.

Если я перебираю список и распечатываю его, перебираем по списку и распечатываем его снова.

Будет ли порядок извлечения в этих двух случаях одинаковым? (Я знаю, что это может отличаться от порядка вставки)

4b9b3361

Ответ 1

Да, если вы не изменили промежуточный список. Из http://docs.oracle.com/javase/6/docs/api/java/util/List.html:

итератора

Iterator<E> iterator()

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

Немного неопределенный, возможно, но в других частях этой страницы этот термин определяется:

правильная последовательность (от первого до последнего элемента)

Ответ 2

(я знаю, что это может отличаться от порядка вставки)

Нет, не будет. Контракт List требует, чтобы порядок add был таким же, как и порядок итерации, так как add вставляет в конце, а iterator создает итератор, который выполняет итерацию от начала до конца по порядку.

Set не требует этого, поэтому вы можете ввести в заблуждение договор Set и List относительно порядка итерации.

Из Javadoc:

Iterator<E> iterator()

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

Ответ 3

Это в спецификации интерфейса List для сохранения порядка.

Это классы Set, которые не сохраняют порядок.

Ответ 4

Если вы не мутируете список, то порядок итераций останется неизменным. Списки имеют заказываемый по контракту порядок, а спецификация iterator гарантирует, что он выполняет итерацию по элементам в этом порядке.

Ответ 5

Да, ArrayList гарантирует порядок итерации по своим элементам - то есть они выйдут в том же порядке, в который вы их вставляли, при условии, что вы не делаете никаких вставок, итерации по ArrayList.

Ответ 6

Извлечение не меняется, если вы не измените используемый итератор. Пока вы используете тот же метод для извлечения и не изменили сам список, элементы будут возвращены в том же порядке.

Ответ 7

Когда вы добавляете элемент в ArrayList с помощью add(E e), этот элемент добавляется в конец списка. Следовательно, если все, что вы делаете, вызывает метод с одним аргументом add несколько раз, а затем итерацию, то итерация будет в том же порядке, что и вызовы add.

Ответ 8

Порядок итераций будет одинаковым при каждом повторении по одному и тому же немодифицированному списку.

Кроме того, если вы добавите элементы с помощью метода add(), порядок итераций будет таким же, как и порядок вставки, поскольку этот метод добавляет элементы в конец списка.

Ответ 9

Да, порядок поиска гарантированно будет таким же, пока список не будет мутирован, и вы используете тот же самый итератор, но для того, чтобы полагаться на порядок извлечения, было указано что-то подозрительное в дизайне. Как правило, не очень хорошая идея основывать бизнес-логику на определенном порядке поиска.

Ответ 10

Even Sets вернут тот же результат, если вы не измените их (добавление или удаление элементов).