Ответ 1
int[] myNumbers = new int[size];
Arrays.fill(myNumbers, 0);
см. http://java.sun.com/j2se/1.5.0/docs/api/java/util/Arrays.html
У меня есть массив целых чисел в Java, который инициализируется следующим образом:
public int MyNumbers[] = {0,0,0,0};
Я хотел бы, однако, инициализировать массив для числа нулей с переменной длиной.
private int number_of_elements = 4;
public int MyNumbers[] = {0} * number_of_elements; // ????
Я не знаю, как сделать это новым для Java, исходящим из C. Любые предложения?
ИЗМЕНИТЬ
Я знаю, что могу использовать цикл for
, но я надеюсь, что это был простой способ сделать это.
int[] myNumbers = new int[size];
Arrays.fill(myNumbers, 0);
см. http://java.sun.com/j2se/1.5.0/docs/api/java/util/Arrays.html
int[] MyNumbers = new int[number_of_elements];
В качестве альтернативы вы можете использовать ArrayList
, чтобы вам не нужно было беспокоиться о размере заранее. При необходимости он будет динамически расширять внутренний массив.
List<Integer> numbers = new ArrayList<Integer>();
numbers.add(0);
numbers.add(2);
// ...
Здесь учебник, чтобы узнать больше о API коллекций, который ArrayList
является частью.
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);
Если вы ищете нечто похожее на 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);
}
}