2012-06-13 3 views
2

Есть ли какие-либо преимущества или где возвращение итератора более желательно, чтобы коллекция была в методах для уровня доступа к данным?Возвращающийся итератор вместо коллекции

Я где-то видел его и не помню, почему.

PS: Может быть, это связано с реального времени выборки некоторых данных, а не завершить

+0

Не знаете, как использовать итератор для выполнения «runtime-fetching». Итераторы - это объекты, которые могут перебирать коллекции, если данные еще не собраны, итератор не видит их. –

+0

Что-то вроде этой ссылки Я нашел (но ее не обновляют и не говорят о лучших практиках) http://www.techrepublic.com/article/deciding-between-iterators-and-lists-for-returned-values-in- Java/1046675 – Whimusical

ответ

2

JDBC ResultSet в основном работает так, хотя это другой и более сложный интерфейс. И да, причина в том, что он позволяет обрабатывать огромные массивы данных, не забирая их полностью в память.

Кроме того, некоторые другие языки (C++ и Python, я верю) идиоматически используют итераторы в качестве элементов данных, которые необходимо передать. В Java это, как правило, не выполняется, и его следует избегать (если нет веских причин), поскольку итераторы Java не имеют некоторых важных функций, которые делают их гораздо менее полезными, чем коллекция, а именно: вы не можете их скопировать или сбросить.

2

итератора имеет более простой интерфейс, чем коллекции, так и должно быть проще реализовать пользовательскую оболочку, которая делает вещи так, вы хотите их.

Как вы упомянули, вы можете реализовать его таким образом, чтобы метод next() блокировался до тех пор, пока данные не будут доступны. Кроме того, вы можете не выполнять операцию remove() и, таким образом, не позволять вызывающему пользователю изменять базовую коллекцию.

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