Ваш вопрос предполагает, что вы, возможно, искали способ избежать выделения нового массива. Если это так, это решение может быть тем, что вы ищете. Вместо того, чтобы возвращать массив меньшего размера, он вместо этого модифицирует данный массив, перемещая все нулевые ссылки в конец и упаковывая все строки впереди. Так, например, {"Foo","Bar",null,"Baz"}
становится {"Foo","Bar","Baz",null}
.
public static void packStrings(String[] strArr) {
int writeIndex = 0;
for (String str : strArr)
if (str != null) strArr[writeIndex++] = str;
Arrays.fill(strArr, writeIndex, strArr.length, null);
}
И в псевдокоде это было бы ... ах ...
function packString(stringArray)
initialize write index to 0
for each string in stringArray
if the string isn't null
write it to stringArray at the write index
advance the write index
set the rest of stringArray at the write index and beyond to null
Это O (n), но, более того, это просто n массивов и нулевых распределений.