A menudo, la primera estructura de datos con la que se familiariza un programador novato es una matriz. Esto se debe a que las matrices son bastante fáciles de aprender.
¿Qué son los Arrays en Java?
Un arreglo es una estructura de datos utilizada para almacenar datos del mismo tipo. Los arreglos almacenan sus elementos en ubicaciones de memoria contiguas. En Java, los arreglos son objetos. Puedes poner objetos de cualquier tipo, primitivos u objetos, en una matriz. El plan de estudios de código abierto de freeCodeCamp ha ayudado a más de 40,000 personas a obtener trabajos como desarrolladores.
Cuando hay una necesidad de usar muchas variables, entonces tenemos un gran problema porque entraremos en conflicto con el nombre de las variables. Para que en esta situación, donde queremos operar con muchos números, podamos usar un array. Los arrays son un conjunto de elementos que tienen el mismo tipo de datos o podemos decir que los arrays son una colección de elementos que tienen el mismo nombre y el mismo tipo de datos. Pero siempre recuerda que los arrays siempre comienzan desde su valor de índice y el índice del array comienza desde 0 hasta n-1. Supongamos que queremos acceder al quinto elemento del array, entonces usaremos el cuarto elemento porque los arrays comienzan desde 0 y los arrays siempre se almacenan en ubicaciones de memoria continuas. El número de elementos y los tipos de array se identifican mediante el subíndice de los elementos del array.
Las matrices unidimensionales se utilizan para usar muchos elementos y se declaran con un solo corchete, como int a [], etc. Las matrices bidimensionales se utilizan cuando queremos realizar la operación en formas de matriz. Las matrices bidimensionales se utilizan para crear una matriz y mostrar los elementos del array en forma de filas y columnas. El total de elementos de los arrays se calculará multiplicando los elementos de las filas y las columnas, como int a[3][3]. Entonces, este es el ejemplo de una matriz bidimensional. En esta, el primer 3 representa el número total de filas y el segundo elemento representa el número total de columnas. El número total de elementos se juzga multiplicando el número de filas por el número de columnas en el array, en el array anterior el número total de elementos es 9.
Hoy veremos matrices de cadenas en lenguaje Java, es decir, matrices en las que cada elemento es una cadena.
Lea también: IVA 21% Excel
Declaración e Inicialización de Arrays de Cadenas
Descubriremos cómo declarar Java String Array y cómo trabajar con él. Puedes declarar e inicializar una matriz String en Java de diferentes maneras.
Cuando vayamos a inicializar un array en Java tenemos varias posibilidades de hacerlo. Una de las formas más habituales y eficientes de inicializar un array en Java es durante la propia declaración del array. En este caso, es importante destacar que no es necesario que especifiquemos numéricamente el número de elementos que queremos en el array. Esta técnica de inicialización es particularmente útil cuando ya sabemos de antemano qué elementos queremos en el array.
-
Declaración e inicialización directa:
String[] myArray = {"value1", "value2", "value3"};
Aquí primero declaramos una variable myArray de tipo String[]. Luego, inicializamos la matriz con tres valores de cadena encerrados entre llaves.
Lea también: Guía IVA reducido
-
Separando declaración e inicialización:
myArray = new String[] {"value1", "value2", "value3"}; // initialize the array
Aquí tenemos el mismo resultado que el primer fragmento de código, pero separamos la declaración y la inicialización en dos pasos.
-
Declaración con tamaño fijo, sin valores iniciales:
String[] myArray = new String[5];
Lea también: ¿Cómo localizar tus XML del SAT?
Aquí crea una matriz de cadenas y especifica el tamaño de la matriz de cadenas, pero no proporciona ningún valor inicial. Luego puede asignar valores a la matriz mediante un bucle o especificando los valores individualmente.
En todos los casos, debe especificar el tipo de matriz (en este caso, String) al declarar la variable. En el caso del lenguaje Java, solo puedes almacenar un tipo de datos en una matriz. En otras palabras, las matrices en Java son homogéneas. Las celdas de una matriz pueden contener objetos de cualquier tipo.
Otra de las formas de inicializar un array en Java es asignando directamente los elementos a cada una de sus posiciones. El primer paso para utilizar este método es la declaración del array. La declaración de un array implica especificar su tipo y su tamaño. Una vez que el array ha sido declarado, podemos comenzar a asignar valores a cada una de sus posiciones. Es importante recordar que, en Java, el índice del primer elemento de un array es siempre cero. Vale la pena señalar que este método de inicialización tiene una limitación conceptual. Es más adecuado cuando conocemos de antemano los elementos que queremos almacenar en el array.
Iteración a través de Arrays de Cadenas
En Java puedes iterar a través de una matriz de cadenas usando un bucle. Podría ser una construcción for o foreach.
String[] stringArray = {"Violín", "Guitarra", "Piano", "Flauta"};
for (String instrument : stringArray) { System.out.println(instrument); }
Aquí primero creamos una matriz de cuerdas llamada stringArray con cuatro elementos (instrumentos musicales de cuerdas). Luego, ambos bucles iteran a través de cada elemento de la matriz de cadenas y lo imprimen en la consola. El bucle foreach es una forma más concisa de iterar a través de una matriz, pero el bucle for puede resultar útil si necesita acceder al índice de cada elemento.
Operaciones Comunes con Arrays de Cadenas
Agregar un Nuevo Elemento a un Array
No puedes simplemente agregar un nuevo elemento a una matriz en Java. Las matrices en Java tienen una longitud fija, por lo que no se pueden agregar ni eliminar elementos de una matriz una vez que se ha creado. Sin embargo, Java tiene trucos especiales para ello. Si tiene una matriz de cadenas y necesita agregar una nueva cadena al final de su matriz, use el método Arrays.copyOf. Este método crea una nueva matriz con un elemento adicional y luego agrega el nuevo elemento al final de la nueva matriz.
newArray[newArray.length - 1] = newElement;
Aquí el método Arrays.copyOf crea una nueva matriz llamada newArray con una longitud uno mayor que la oldArray. El método agrega newElement al final de newArray asignándolo al último elemento de newArray. Para agregar o eliminar elementos dinámicamente de una colección, será mejor que utilice otra estructura de datos. Por ejemplo, una Lista o un Mapa.
Ordenar Elementos en un Array de Cadenas
Si está interesado en buenos ejercicios de programación, puede escribir su algoritmo de clasificación para el procedimiento de clasificación. Sin embargo, en tareas de trabajo reales es mucho más fácil utilizar el método Arrays.sort().
String[] stringArray = {"Banana", "Manzana", "Naranja", "Kiwi"};
Arrays.sort(stringArray);
for (String fruit : stringArray) { System.out.println(fruit); }
Aquí primero creamos una matriz de cadenas llamada stringArray con cuatro elementos. Luego llamamos al método Arrays.sort() para ordenar los elementos de la matriz en orden ascendente. Finalmente, iteramos a través de la matriz ordenada usando un bucle for-each e imprimimos cada elemento en la consola. Como puede ver, el método ordenó alfabéticamente los elementos en stringArray.
Buscar una Cadena Específica en un Array de Cadenas
Para buscar una cadena necesaria en una matriz de cadenas en Java, puede usar un bucle para iterar a través de cada elemento de la matriz y compararlo con la cadena que está buscando.
Aquí estamos creando un método con dos argumentos, una matriz y una cadena que se encontrará. Creamos un 'encontrado' booleano para rastrear si encontramos el String. Es el valor encontrado que devolverá el método. Luego usamos un bucle for-each para iterar sobre cada elemento de la matriz. Usamos el método equals() en el bucle para comparar el elemento actual con la cadena de búsqueda. Si el método encuentra una coincidencia, la configuramos como verdadera y usamos la declaración break para salir del ciclo antes. Finalmente imprimimos el resultado dependiendo de si lo encontrado es verdadero o falso. En el método principal llamamos dos veces al método de búsqueda, con el String que está en el array y el que no. Por ejemplo, "violonchelo encontrado en la matriz".
Convertir un Array de Cadenas en una Cadena
Puede utilizar el método String.join() para convertir una matriz String en String en Java. Este método devuelve una cadena concatenada por el delimitador dado. El delimitador se copia para cada elemento en el método String.join(). Primero, declaramos una matriz de cadenas myArray con tres valores de cadena. Luego usamos el método String.join() para unir todos los elementos de la matriz en una sola cadena. El primer argumento de String.join() es el delimitador que desea utilizar entre cada elemento de la matriz. Hemos utilizado "," (una coma seguida de un espacio) como delimitador. El segundo argumento es la matriz a la que desea unirse.
Manejo e Impresión de Arrays
No podemos imprimir arreglos en Java usando el método System.out.println(). ¿Qué está pasando detrás de escena? El método System.out.println() convierte el objeto que pasamos en una cadena llamando String.valueOf(). Si el objeto pasado es null retorna null, si no, este llama obj.toString(). 74a14482 es la representación hexadecimal sin firma del código hash del arreglo. Cada vez que estemos creando nuestras propias clases personalizadas, es una buena práctica anular el método Object.toString(). En vez de eso, estas son las formas en las que podemos imprimir un arreglo:
- Bucles: bucle for y bucle for-each
- método Arrays.toString()
- método Arrays.deepToString()
- método Arrays.asList()
- Interfaz Java Iterator
- Java Stream API
Veámoslos uno por uno.
Uso del método Arrays.toString()
Arrays.toString() es un método estático de la clase del arreglo que pertenece al paquete java.util. Retorna una representación de los contenidos del arreglo especificado. Por ejemplo, // output: [1, 4, 7]. Los arreglos unidimensionales de tipo de referencia también pueden ser impresos usando este método.
Uso del método Arrays.deepToString()
Este método no es apropiado para arreglos multidimensionales como [[Profesor{name='John'}, Profesor{name='David'}],[Profesor{name='Mary'}]]. Tenemos que anular Object.toString() en nuestra clase Profesor. Si tienes curiosidad de cómo lo hace recursión, aquí encuentras el código fuente para el método Arrays.deepToString().
Uso del método Arrays.asList()
Hemos cambiado el tipo int a un número entero, porque List es una colección que guarda una lista de objetos. Cuando estamos convirtiendo un arreglo a una lista debería ser un arreglo de tipo de referencia. Java llama Arrays.asList(intArray).toString(). Por ejemplo, // output: [Profesor{name='John'}, Profesor{name='Mary'}]. No podemos imprimir arreglos multidimensionales usando este método.
Interfaz del Iterator Java
Similar a un bucle for-each, podemos usar la interfaz del iterador para recorrer los elementos del arreglo e imprimirlos. Se puede crear un objeto iterator invocando el método iterator() sobre una colección (Collection).
Java Stream API
La Stream API es usada para procesar colecciones de objetos. Una corriente (stream) es una secuencia de objetos.
Vectores en Java: Una Alternativa Dinámica
Sabemos que los Arrays son muy útiles cuando hay necesidad de usar un número de variables. Pero hay un problema con los Arrays: usan solo un tipo de datos o los elementos del array son siempre del mismo tipo. Para evitar este problema, se utilizan los Vectores. Estos también son una colección de elementos que son de tipo de datos de objeto. Para usar Vectores, tenemos que importar el paquete java.util. Estos también se conocen como Array dinámico de tipo de datos de objeto. Pero siempre recuerda que los vectores no admiten tipos de datos primitivos como int, float, char, etc.
Algunos métodos importantes de los vectores son:
- addElement: Para insertar un elemento en un Vector.
- elementAt: Da el nombre del carácter en la posición.
- copyInto: Para copiar todos los elementos en un Array.
Por ejemplo, podemos definir un vector de 5 componentes de tipo float que representen las alturas de 5 personas. Obtener el promedio de las mismas. En otro método, procedemos a sumar todas sus componentes y obtener el promedio. En este problema podemos observar una ventaja de tener almacenadas todas las alturas de las personas. Mientras el programa está en ejecución, tenemos el vector de alturas a nuestra disposición.
