Простой: если вы хотите, чтобы ваша «коллекция» могла быть зациклена так же, как и любая другая стандартная коллекция Java, вам лучше иметь implements Iterable<T>
в вашем классе.
Смысл в том, чтобы иметь этот интерфейспозволяет пользователям делать это:
for (Bar foo : someSortedGroupOfBars) {
Другими словами: только когда вы абсолютно уверены, что ваши группы никогда не будут повторяться с использованием "стандартных" шаблонов Java, тогда вы не решите реализоватьэтот интерфейс при реализации своего рода «контейнера».
Вы можете даже пойти еще дальше и решить, имеет ли смысл реализация Collection
или еще более специализированный интерфейс, такой как List
!Это, конечно, требует от вас реализации большего количества методов (которые все-таки имеют смысл для «группового контейнера» imho).
Помимо этого, это в основном зависит от вашего контекста.Если вы пишете этот класс для очень конкретной задачи (например, школьного упражнения), то: напишите минимальный объем кода, который делает то, что вам нужно.Тогда может быть правильным не реализовать интерфейс, который вам не нужен.Но как только этот класс должен существовать для «большего», реализация интерфейса - очень естественная и прямолинейная идея.
И, отвечая на другой вопрос, заданный: «делегирование» итератору базового ArrayList является правильным подходом.