Возврат значения null более эффективен, поскольку вы избегаете дополнительных затрат на создание нового массива или объекта коллекции. Это правда, что вам нужно добавить нулевую проверку в точке, где вы используете выходные данные функции, но издержки для этого (в Java и почти во всех языках) незначительны. Я также считаю, что проверка на нулевое значение - это хорошая привычка, особенно при работе со сторонними библиотеками.
Недостатком является то, что вы делаете код более многословным.
Если вы возвращаете пустой массив, вы можете снизить производительность, повторно используя тот же объект. Создайте неизменную константу и верните ее:
private static final String[] EMPTY = {};
Или:
private static final List<String> EMPTY =
Collections.unmodifiableList(new ArrayList<String>());