Нет, вы не можете изменить размер массива после его создания. Вы должны либо распределить его больше, чем, по вашему мнению, вам нужно, либо принять накладные расходы, связанные с перераспределением, которое необходимо для увеличения размера. Когда это произойдет, вам придется выделить новый и скопировать данные из старого в новый:
int oldItems[] = new int[10];
for (int i=0; i<10; i++) {
oldItems[i] = i+10;
}
int newItems[] = new int[20];
System.arraycopy(oldItems, 0, newItems, 0, 10);
oldItems = newItems;
Если вы окажетесь в такой ситуации, я настоятельно рекомендую вместо этого использовать коллекции Java. В частности ArrayList
по существу оборачивает массив и заботится о логике для увеличения массива по мере необходимости:
List<xClass> mysclass = new ArrayList<xClass>();
myclass.add(new xClass());
myclass.add(new xClass());
Обычно ArrayList
является предпочтительным решением для массива в любом случае по нескольким причинам. Во-первых, массивы изменчивы. Если у вас есть класс, который делает это:
class Myclass {
private int items[];
public int[] getItems() { return items; }
}
вы создали проблему, так как вызывающая сторона может изменить вашего личного члена данных, что приводит к всевозможному защитному копированию. Сравните это с версией списка:
class Myclass {
private List<Integer> items;
public List<Integer> getItems() { return Collections.unmodifiableList(items); }
}