Инициализация массива с переменным размером в Java

У меня есть массив целых чисел в Java, который инициализируется следующим образом:

public int MyNumbers[] = {0,0,0,0};

Я хотел бы, однако, инициализировать массив для числа нулей с переменной длиной.

private int number_of_elements = 4;
public int MyNumbers[] = {0} * number_of_elements; // ????

Я не знаю, как сделать это новым для Java, исходящим из C. Любые предложения?

ИЗМЕНИТЬ

Я знаю, что могу использовать цикл for, но я надеюсь, что это был простой способ сделать это.

Ответы

Ответ 2

int[] MyNumbers = new int[number_of_elements];

Ответ 3

В качестве альтернативы вы можете использовать ArrayList, чтобы вам не нужно было беспокоиться о размере заранее. При необходимости он будет динамически расширять внутренний массив.

List<Integer> numbers = new ArrayList<Integer>();
numbers.add(0);
numbers.add(2);
// ...

Здесь учебник, чтобы узнать больше о API коллекций, который ArrayList является частью.

Ответ 4

int[] MyNumbers = new int[number_of_elements];

Так как это массив из int, элементы массива автоматически получат значение по умолчанию для int в Java 0.

Если это был массив объектов Integer, тогда вам нужно заполнить массив после его создания, поскольку значение по умолчанию для ссылки на объект null. Чтобы установить значения по умолчанию в массиве Object, вы можете сделать следующее:

Integer[] MyNumbers = new Integer[number_of_elements];
java.util.Arrays.fill(MyNumbers, new Integer(0));

То же самое можно было бы использовать для инициализации массива int для значений, отличных от нуля, следующим образом:

int[] MyNumbers = new int[number_of_elements];
java.util.Arrays.fill(MyNumbers, 1);

Ответ 5

Если вы ищете нечто похожее на Memset в C, я не думаю, что он есть. Реализация Arrays.fill кажется такой же, как цикл for, если вы посмотрите на Javadoc.

Однако я столкнулся с этой статьей, в которой обсуждается тот же вопрос http://www.searchenginecaffe.com/2007/03/how-to-quickly-reset-value-of-java.html Похоже, что использование system.arraycopy - ваше лучшее решение, и это функция, которую вы можете использовать (скопировано из ссылки)

public static void bytefill(byte[] array, byte value) {
 int len = array.length;
 if (len > 0)
 array[0] = value;
  for (int i = 1; i < len; i += i) {
    System.arraycopy( array, 0, array, i, ((len - i) < i) ? (len - i) : i);
 }
}