Подтвердить что ты не робот

Любой ярлык для инициализации всех элементов массива до нуля?

В C/C++ я использовал

int arr[10] = {0};

чтобы инициализировать все мои элементы массива до 0.
Есть ли аналогичный ярлык в Java?
Я хочу, чтобы избежать использования цикла, возможно ли это?

int arr[] = new int[10];
for(int i=0;i<arr.length;i++)
    arr[i] = 0;
4b9b3361

Ответ 1

Значение по умолчанию 0 для массивов интегральных типов гарантируется спецификацией языка:

Каждая переменная класса, переменная экземпляра или компонент массива инициализируется значением по умолчанию при его создании (§15.9, §15.10) [...] Для типа int значение по умолчанию равно нулю, 0.  

Если вы хотите инициализировать массив другим значением, вы можете использовать java.util.Arrays.fill() (что будет курс использует внутренний цикл).

Ответ 2

В то время как другие ответы верны (значения int массива по умолчанию инициализируются 0), если вы хотите явно сделать это (например, если вам нужен массив, заполненный значением 42), вы можете использовать заливку ( ) метод Arrays класс:

int [] myarray = new int[num_elts];
Arrays.fill(myarray, 42);

Или, если вы поклонник 1-лайнеров, вы можете использовать Collections.nCopies():

Integer[] arr = Collections.nCopies(3, 42).toArray(new Integer[0]);

Дает arr значение:

[42, 42, 42]

(хотя он Integer, а не int), если вам нужен примитивный тип, вы можете отнестись к Apache Commons ArrayUtils.toPrimitive() рутина:

int [] primarr = ArrayUtils.toPrimitive(arr);

Ответ 3

В java все элементы по умолчанию инициализируются 0. Вы можете сохранить цикл.

Ответ 4

Как это снижает эффективность вашего приложения....? Читайте ниже.

В спецификации языка Java значение Значение по умолчанию/начальное значение для любого объекта может быть указано как "Выполняется".

Для типа байта значение по умолчанию ноль, то есть значение (байт) 0 strong > .

Для типа короткий значение по умолчанию ноль, то есть значение (короткое) 0 strong > .

Для типа int значение по умолчанию ноль, то есть 0.

Для типа long значение по умолчанию ноль, то есть 0L.

Для типа float значение по умолчанию положительный ноль, то есть 0.0f.. p >

Для типа double значение по умолчанию положительный ноль, то есть 0.0d.. p >

Для типа char значение по умолчанию - это символ null, то есть \u0000. > .

Для типа boolean значение по умолчанию false.

Для всех ссылочных типов значение по умолчанию null.

Учитывая все это, вам не нужно инициализировать нулевые значения для элементов массива, потому что по умолчанию все элементы массива равны 0 для массива int.

Поскольку массив - это объект-контейнер, который содержит фиксированное количество значений одного типа. Теперь тип массива для вас - int, поэтому рассмотрим, что значение по умолчанию для всех элементов массива будет автоматически 0, поскольку оно удерживает тип int.

Теперь рассмотрим массив для String type, чтобы все элементы массива имели значение по умолчанию нуль.

Почему бы не сделать это......?

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

int arr[] = new int[10];
for(int i=0;i<arr.length;i++)
    arr[i] = 0;

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

Чем больше использования машинного цикла == > Больше времени для обработки данных == > Время вывода будет значительно увеличиваться. так что ваша обработка данных приложений может считаться низким уровнем (медленнее до некоторого уровня).

Ответ 5

Вы можете сохранить цикл, инициализация уже сделана равной 0. Даже для локальной переменной.

Но, пожалуйста, исправьте место, где вы размещаете скобки, для удобства чтения (признанная лучшая практика):

int[] arr = new int[10];

Ответ 6

Если вы используете Float или Integer, вы можете назначить значение по умолчанию, подобное этому...

Integer[] data = new Integer[20];
Arrays.fill(data,new Integer(0));

Ответ 7

Вы можете создать новый пустой массив с существующим размером массива, и вы можете назначить их в свой массив. Это может быть быстрее, чем другие. Снайпер:

package com.array.zero;
public class ArrayZero {
public static void main(String[] args) {
    // Your array with data
    int[] yourArray = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    //Creating same sized array with 0
    int[] tempArray = new int[yourArray.length];
    Assigning temp array to replace values by zero [0]
    yourArray = tempArray;

    //testing the array size and value to be zero
    for (int item : yourArray) {
        System.out.println(item);
    }
}
}

Результат:

0
0
0
0
0    
0
0
0
0

Ответ 8

Да, значения int в массиве инициализируются до нуля. Но вам это не гарантировано. Документация Oracle утверждает, что это плохая практика кодирования.

Ответ 9

После инициализации значения int уже нулевые, как отмечали все. Если у вас есть ситуация, когда вам действительно нужно установить значения массива в нуль и вы хотите их оптимизировать, используйте System.arraycopy:

static private int[] zeros = new float[64];
...
int[] values = ...
if (zeros.length < values.length) zeros = new int[values.length];
System.arraycopy(zeros, 0, values, 0, values.length);

Используется memcpy под обложками в большинстве или во всех реализациях JRE. Обратите внимание, что использование статического, как это безопасно даже с несколькими потоками, поскольку в худшем случае несколько потоков перераспределяют zeros одновременно, что ничего не болит.

Вы также можете использовать Arrays.fill, как упомянули некоторые другие. Arrays.fill может использовать memcpy в интеллектуальном JVM, но, вероятно, это просто цикл Java и проверка границ, которая влечет за собой.

Определите свои оптимизации, конечно.

Ответ 10

объявить массив как переменную экземпляра в классе i.e из любого метода, а JVM будет давать значение 0 в качестве значения по умолчанию. Вам не нужно больше беспокоиться

Ответ 11

Еще один подход, используя лямбда выше java 8

 Arrays.stream(new Integer[nodelist.size()]).map(e -> 
 Integer.MAX_VALUE).toArray(Integer[]::new);

Ответ 12

    int a=7, b=7 ,c=0,d=0;
    int dizi[][]=new int[a][b];
    for(int i=0;i<a;i++){
        for(int q=d;q<b;q++){
            dizi[i][q]=c;               
            System.out.print(dizi[i][q]);
            c++;
        }

        c-=b+1;
        System.out.println();               
    }

результат   0123456   -1012345   -2-101234   -3-2-10123   -4-3-2-1012   -5-4-3-2-101   -6-5-4-3-2-10