JSF ничего не конвертирует. Оба одинаково хорошо поддерживаются. JSF просто поместит значение в подходящую реализацию DataModel
, чтобы отслеживать итерированную строку. См. Также исходный код UIRepeat
(ниже от Мохарры):
private DataModel getDataModel() {
if (this.model == null) {
Object val = this.getValue();
if (val == null) {
this.model = EMPTY_MODEL;
} else if (val instanceof DataModel) {
this.model = (DataModel<Object>) val;
} else if (val instanceof List) {
this.model = new ListDataModel<Object>((List<Object>) val);
} else if (Object[].class.isAssignableFrom(val.getClass())) {
this.model = new ArrayDataModel<Object>((Object[]) val);
} else if (val instanceof ResultSet) {
this.model = new ResultSetDataModel((ResultSet) val);
} else {
this.model = new ScalarDataModel<Object>(val);
}
}
return this.model;
}
Просто выберите любой тип значения, который лучше и проще поддерживать. Профиль при необходимости. Простые массивы имеют меньший объем памяти, но их также сложнее поддерживать (например, добавление / удаление элементов должно происходить на System#arrayCopy()
). Это может иметь смысл только для статических коллекций, но не для динамических коллекций.
Если вы хотите пойти на преждевременную оптимизацию, то вам, вероятно, вообще не следует использовать JSF, а просто обычный ванильный JSP / Servlet и работать только с примитивами и простыми массивами:)
В наши дни память дешева.