В дополнение к полученным ответам вы можете предварительно инициализировать емкость StringBuilder
или StringBuffer
. Это сокращает количество повторных копий внутреннего массива при его расширении. Поскольку вы не знаете точную необходимую емкость, вы можете оценить средний размер каждого элемента и умножить его на количество элементов.
private static final int ESTIMATE_ELEM_SIZE = 8;
public static String join(Collection col, char delim)
{
int len = col.size();
if (len == 0)
return "";
StringBuilder buf = new StringBuilder(ESTIMATE_ELEM_SIZE * len);
for (Object elem : col)
{
buf.append(elem).append(delim);
}
return buf.substring(0, buf.length() - 1);
}
Здесь показаны некоторые методы, которыми поделились другие: используйте StringBuilder
, не помещайте проверку if
в цикл, и используйте расширенный цикл foreach.
Я бы также порекомендовал изменить первый параметр на наиболее общий тип, который имеет смысл, чтобы его можно было многократно использовать. В этом случае, поскольку вам действительно не нужны индексы для адресации каждого элемента, можно указать Collection
.
Обратите внимание, что также нет необходимости приводить к String
, поскольку StringBuilder.append()
преобразует элемент в String
, если это необходимо. Это позволяет использовать это с коллекциями, содержащими другие виды объектов, кроме строк.