Cómo inicializar todos los elementos de una matriz a cualquier valor específico en java


108

En C/C++tenemos memset()la función que puede cumplir con mi deseo, sino en Javacómo puedo inicializar todos los elementos a un valor específico? Siempre que escribimos int[] array=new int[10];, esto simplemente inicializa una matriz de tamaño 10 con todos los elementos iguales a cero. Solo quiero cambiar este número entero de inicialización para uno de mis arreglos. es decir, quiero inicializar una matriz que tenga todos los elementos iguales a -1. De lo contrario, tengo que poner un forbucle justo después de la inicialización, que va de índice 0a índice size-1y dentro de ese bucle, le estoy asignando un elemento -1. A continuación se muestra el código para una mayor comprensión.

    int[] array = new int[10];
    for (int i = 0; i < size; i++) {
        array[i] = -1;
    }

¿Voy correcto? ¿Hay alguna otra forma de hacer lo mismo?

Respuestas:


212

Si es un tipo primitivo, puede usar Arrays.fill():

Arrays.fill(array, -1);

[ Por cierto, memseten C o C ++ solo tiene un uso real para matrices de char. ]


17
Revisé el código fuente de Arrays.fill(). Hace la misma cosa. public static void fill(int[] a, int val) { for (int i = 0, len = a.length; i < len; i++) a[i] = val; }
Ravi Joshi

2
Sí. Como debería ser. Aunque sospecho que el JIT podría ser lo suficientemente inteligente como para mejorar la implementación básica.
Louis Wasserman

1
Estoy en desacuerdo. memsettambién se puede utilizar, y de hecho es muy útil, en matrices de enteros cuando necesita rellenar con 0o -1, por ejemplo, en problemas de DP.
Sнаđошƒаӽ

@ Sнаđошƒаӽ - No de forma portátil.
Oliver Charlesworth

1
Solo un FYI: puede usar memset_pattern4, 8 y 16 para otros tamaños de enteros.
geowar


5

También es posible con los flujos de Java 8:

int[] a = IntStream.generate(() -> value).limit(count).toArray();

Sin embargo, probablemente no sea la forma más eficiente de hacer el trabajo.


Esto también funcionaría para tipos no primitivos ( Stream.generate(() -> new Whatever("Hello World", 42)).limit(count).toArray();), por lo que es más flexible que Arrays.fill (). Sin embargo, no estoy seguro de la eficiencia, como dices.
Christopher Riches

3

Podrías hacer esto si es corto:

int[] array = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};

pero eso se vuelve malo para algunos.

Más fácil sería un forbucle:

  int[] myArray = new int[10];
  for (int i = 0; i < array.length; i++)
       myArray[i] = -1;

Editar: También me gusta la Arrays.fill()opción que otras personas han mencionado.


¿Existe alguna disposición para inicializar una matriz bidimensional? algo como int a [] [] = new int [3] [4]; Arrays.fill (a, -1); para que los 12 elementos se establezcan con -1.
PoornaChandra



0

Puede utilizar Arrays.fill(array, -1).


0

Evidentemente, puede usar Arrays.fill (), aunque la forma en que lo ha hecho también funciona.


Ya. Incluso Arrays.fill()usa un forbucle con index 0to size-1. De la misma manera, lo que hice. Gracias por su respuesta.
Ravi Joshi

0

Uso de Java 8, puede simplemente usar ncopiesde Collectionsclase:

Object[] arrays = Collections.nCopies(size, object).stream().toArray();

En tu caso será:

Integer[] arrays = Collections.nCopies(10, Integer.valueOf(1)).stream().toArray(Integer[]::new);
.

Aquí hay una respuesta detallada de un caso similar suyo.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.