header( 'Location: http://www.yoursite.com/new_page.html' );
Многие типы коллекций существовал до Iterable
(который был введен только в 1.5) - было мало причин для добавления конструктора, принимающего Iterable
, а также Collection
, но изменение существующего конструктора было бы критическим изменением.
Лично я бы использовал Iterable
, если это позволяет вам делать все, что вы хотите. Это'
Iterable
создает объекты Iterator
. Объект Iterator
по определению выполняет итерацию . Обратите внимание, что интерфейс Iterator
не дает никаких обещаний относительно того, сколько раз next ()
может быть вызвано, прежде чем hasNext ()
вернет false
. Итератор
может перебирать значения Integer.MAX_VALUE + 1
до того, как его метод hasNext ()
вернет false
.
Однако, Коллекция
- это особая форма Iterable
. Поскольку коллекция
не может иметь более Integer.MAX_VALUE
элементов (в силу метода size ()
),
Используйте самый общий интерфейс, который вы можете. Поскольку все, что вам нужно сделать, это выполнить итерацию, я бы сказал, что Iterable
- это правильный путь (поскольку он позволяет использовать ленивые итераторы и т. Д.). Вам все равно, откуда берется итератор, поэтому не ограничивайте его больше, чем нужно.
Если вы выберете Collection, тогда ваш класс может быть инициализирован только из коллекции, если вы выберете Iterable, вы можете инициализировать либо коллекцию, либо итерацию.
В качестве усилий и производительность для обоих будет одинаковой, имеет смысл принять Iterable в конструкторе.
Некоторые конструкторы, например ArrayList (Collection c), для повышения эффективности используют метод toArray () класса Collection.
Вы правы, так как считается хорошей практикой запрашивать наиболее общую форму того, что вам нужно.
Согласно принципу наименьшего удивления, вы должны эмулировать шаблон коллекции Java и взять конструктор коллекции arg. Это сделает людей, которые придут после вас, немного менее озадаченными.
См. «Почему так много внимания уделяется итераторам и итерациям?» на FAQ по Google Collection в качестве достойного аргумента в пользу итераторов, особенно при работе с большим количеством данных. Одна аналогия, которая может помочь, - подумать о разнице между курсорами только для чтения и прокручиваемыми курсорами.