Инициализация массива переменного размера в Java - PullRequest
15 голосов
/ 07 января 2010

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

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

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

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

Я не знаю, как сделать это, будучи новичком в Java из C. Есть предложения?

EDIT

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

Ответы [ 5 ]

32 голосов
/ 07 января 2010
int[] myNumbers = new int[size];
Arrays.fill(myNumbers, 0);

см. http://java.sun.com/j2se/1.5.0/docs/api/java/util/Arrays.html

6 голосов
/ 07 января 2010
int[] MyNumbers = new int[number_of_elements];
5 голосов
/ 07 января 2010

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

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

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

2 голосов
/ 07 января 2010
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);
0 голосов
/ 19 апреля 2014

Если вы ищете что-то похожее на 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);
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...