Когда я должен принять параметр Повторяемых <T> по сравнению с Набором <T> в Java?

header( 'Location: http://www.yoursite.com/new_page.html' );

68
задан Neuron 17 April 2018 в 13:40
поделиться

8 ответов

Многие типы коллекций существовал до Iterable (который был введен только в 1.5) - было мало причин для добавления конструктора, принимающего Iterable , а также Collection , но изменение существующего конструктора было бы критическим изменением.

Лично я бы использовал Iterable , если это позволяет вам делать все, что вы хотите. Это'

63
ответ дан 24 November 2019 в 14:17
поделиться

Iterable создает объекты Iterator . Объект Iterator по определению выполняет итерацию . Обратите внимание, что интерфейс Iterator не дает никаких обещаний относительно того, сколько раз next () может быть вызвано, прежде чем hasNext () вернет false . Итератор может перебирать значения Integer.MAX_VALUE + 1 до того, как его метод hasNext () вернет false .

Однако, Коллекция - это особая форма Iterable . Поскольку коллекция не может иметь более Integer.MAX_VALUE элементов (в силу метода size () ),

22
ответ дан 24 November 2019 в 14:17
поделиться

Используйте самый общий интерфейс, который вы можете. Поскольку все, что вам нужно сделать, это выполнить итерацию, я бы сказал, что Iterable - это правильный путь (поскольку он позволяет использовать ленивые итераторы и т. Д.). Вам все равно, откуда берется итератор, поэтому не ограничивайте его больше, чем нужно.

8
ответ дан 24 November 2019 в 14:17
поделиться

Если вы выберете Collection, тогда ваш класс может быть инициализирован только из коллекции, если вы выберете Iterable, вы можете инициализировать либо коллекцию, либо итерацию.

В качестве усилий и производительность для обоих будет одинаковой, имеет смысл принять Iterable в конструкторе.

2
ответ дан 24 November 2019 в 14:17
поделиться

Некоторые конструкторы, например ArrayList (Collection c), для повышения эффективности используют метод toArray () класса Collection.

4
ответ дан 24 November 2019 в 14:17
поделиться

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

-1
ответ дан 24 November 2019 в 14:17
поделиться

Согласно принципу наименьшего удивления, вы должны эмулировать шаблон коллекции Java и взять конструктор коллекции arg. Это сделает людей, которые придут после вас, немного менее озадаченными.

0
ответ дан 24 November 2019 в 14:17
поделиться

См. «Почему так много внимания уделяется итераторам и итерациям?» на FAQ по Google Collection в качестве достойного аргумента в пользу итераторов, особенно при работе с большим количеством данных. Одна аналогия, которая может помочь, - подумать о разнице между курсорами только для чтения и прокручиваемыми курсорами.

3
ответ дан 24 November 2019 в 14:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: