2012-05-24 11 views
4

Это скорее теоретический вопрос. Если у меня есть произвольная коллекция c, которая не упорядочена, и я получаю два java.util.Iterator s, позвонив по телефону c.iterator() дважды, оба итератора должны вернуть c элементов в том же порядке?Два java.util.Iterators в один и тот же набор: им нужно возвращать элементы в том же порядке?

Я имею в виду, на практике они, вероятно, всегда будут, но они вынуждены делать это по контракту? не

Спасибо, Jan

ответ

7

Нет, они не являются.

«Там нет никаких гарантий относительно порядка, в котором элементы возвращаются (если это собрание не является экземпляром некоторого класса, который предоставляет гарантию).»

См. Collection#iterator api contract.

Это включает в себя от одного итератора к другому (так как он ничего не говорит об этом).

Также подумайте, что что-то могло измениться в базовой коллекции между получением этих двух итераторов! Что-то добавлено или удалено.

+0

'Нет гарантий относительно порядка возврата элементов '. Но поскольку OP спросил, вызвана ли c.iterator() дважды, результат обоих итераторов будет в том же порядке или нет. –

+0

Это также отражено в моем ответе. –

+0

+1. Только Джон Скит мог бы сказать это лучше. –

2

Реализация итераторов обеспечивается конкретным классом Collection. Итератор для списка даст упорядоченный элемент, а Set не будет

+0

Это не вопрос. –

+1

hmm ... если заказ гарантирован, чем независимо от того, сколько раз вы звоните, вы получите элементы в том же порядке (что и в случае с List), в то время как в случае набора это не будет случай –

+0

OK достаточно честный, если вы положите его как это. –

1

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

Если вы хотите заказать тот же заказ, вам необходимо сначала отсортировать коллекцию.

Смежные вопросы