Это проектные решения, и один размер обычно не подходит для всех. Также выбор того, что используется внутри для переменной-члена, может (и обычно должен) отличаться от того, что подвергается внешнему миру.
В основе своей каркас коллекций Java не предоставляет полный набор интерфейсов, которые описывают характеристики без раскрытия деталей реализации. Один интерфейс, который описывает производительность, RandomAccess
является интерфейсом маркера и даже не расширяет Collection
или повторно раскрывает API get(index)
. Поэтому я не думаю, что есть хороший ответ.
Как правило, я сохраняю тип как можно более неопределенный, пока не распознаю (и не документирую) некоторые важные характеристики. Например, как только я хочу, чтобы методы знали, что порядок вставки сохранен, я бы изменил с Collection
на List
и документировал, почему это ограничение имеет важное значение. Аналогично, перейдите от List
к LinkedList
, если говорить, что эффективное удаление спереди становится важным.
Когда дело доходит до публикации коллекции в общедоступных API-интерфейсах, я всегда стараюсь открыть только несколько API-интерфейсов, которые, как ожидается, будут использоваться; например add(...)
и iterator()
.
Collection - это интерфейс, который реализован LinkedList. Вы должны всегда указывать интерфейс при реализации. – emd