Want to create interactive content? It’s easy in Genially!

Get started free

Arreglos Estáticos y Dinámicos

Jesús Aurelio Castro Magaña

Created on February 20, 2024

Start designing with a free template

Discover more than 1500 professional designs like these:

Vaporwave presentation

Women's Presentation

Geniaflix Presentation

Shadow Presentation

Newspaper Presentation

Memories Presentation

Zen Presentation

Transcript

Arreglos Estáticos y Dinámicos

Estructuras de datos poderosas y una forma eficiente de trabajar con ellas.

Resumen

Dentro de Java y diversos lenguaje de programación, existe la figura de los arreglos o arrays para poder manejar y gestionar información de un cierto tipo, esto funcionalmente se llama "Estructura de Datos", y los arrays son una de estructura fundamental que analizaremos ahora.

Arrays

La estructura básica para gestionar colecciones de datos de forma estática

Definición de Array

En Java, un arreglo (también conocido como array) es una estructura de datos que permite almacenar un conjunto de elementos del mismo tipo bajo un solo nombre. Los arreglos son utilizados para organizar y acceder a datos de manera eficiente. Aquí hay algunas características clave de los arreglos en Java:

Características

Declaración e Inicialización

Acceso por Índice

Longitud del Arreglo

Tipos de Datos

Iteración

Arreglos Multidimensionales

Ventajas y desventajas

Ventajas:

  • Eficiencia en tiempo de acceso y almacenamiento.
  • Sintaxis simple y clara.
  • Adecuados para conjuntos de datos de tamaño conocido.
Desventajas:
  • Tamaño fijo que no se puede modificar.
  • Posible desperdicio de memoria si el tamaño no se define correctamente.
  • Ineficiencia para agregar o eliminar elementos en el medio del arreglo.

Arreglo unidimensionales

+ Acceso

+ declaración

arreglo multidimensional

+ Acceso

+ declaración

ArrayLIST

Estructuras de datos dinámicas que pueden crecer o disminuir según sea necesario

Definición de ArrayLIST

Los ArrayList, por otro lado, son estructuras de datos dinámicas que pueden crecer o disminuir según sea necesario. Están basados en el concepto de arreglos subyacentes y proporcionan métodos para gestionar su tamaño dinámicamente.

Funcionamiento

Tamaño Dinámico:

  • A diferencia de los arrays convencionales, un ArrayList puede crecer o decrecer dinámicamente. No necesitas especificar un tamaño fijo al crearlo.
Almacenamiento de Elementos:
  • Los elementos se almacenan en un array interno. Cuando el ArrayList alcanza su capacidad máxima, se crea un nuevo array con mayor capacidad y los elementos se copian al nuevo array.
Acceso por Índice:
  • Puedes acceder a los elementos utilizando índices, al igual que en un array estándar. Esto permite un acceso rápido a cualquier posición.

Funcionamiento

Inserción y Eliminación Eficientes:

  • ArrayList proporciona métodos eficientes para insertar (add) y eliminar (remove) elementos en cualquier posición. La inserción al final es particularmente rápida.
Iteración y Bucle For-Each:
  • Puedes recorrer los elementos usando bucles for o mediante el uso de iteradores. También es compatible con la sintaxis del bucle for-each.
Tamaño y Capacidad:
  • El método size() te da el número actual de elementos en el ArrayList, mientras que capacity() (no un método directo, pero puedes calcularlo) te da la capacidad actual del array interno.

Funcionamiento

Eficiencia en Acceso Aleatorio:

  • Aunque el acceso aleatorio es rápido, la inserción y eliminación en posiciones intermedias pueden ser menos eficientes en comparación con las operaciones similares en la lista enlazada LinkedList.

Funcionamiento

VECTOR

Estructuras de datos dinámicas que pueden crecer o disminuir según sea necesario

Definición de VECTOR

La clase Vector (paquete java.util), tiene un comportamiento similar a un array unidimensional] Un Vector guarda objetos (referencias) de cualquier tipo y crece dinámicamente, sin necesidad de tener que programar operaciones adicionales. El array donde almacena los elementos es de tipo Object. Por lo que, como ya hemos visto, puede almacenar todo tipo de elementos y/o valores, siempre que sean del mismo tipo.

Funcionamiento

Para usar la clase Vector hemos de poner al principio del archivo del código fuente la siguiente sentencia import import java.util.Vector; Cuando creamos un vector u objeto de la clase Vector, podemos especificar su dimensión inicial, y cuanto crecerá si rebasamos dicha dimensión, así mismo deberemos indicar la clase de los objetos a almacenar mediante su notación diamante "<Clase>".

Funcionamiento

Primer Constructor Vector<Integer> vector=new Vector<Integer>(20, 5); Tenemos un vector de objetos de tipo Integer, es decir, enteros, con una dimensión inicial de 20 elementos que indicamos con el primer argumento del constructor. Si rebasamos dicha dimensión y guardamos 21 elementos la dimensión del vector crece a 25 pues indicamos el número de espacios en memoria a reservar con el segundo argumento del constructor.

Funcionamiento

Segundo Constructor Al segundo constructor, solamente se le pasa la dimensión inicial. Vector<Integer> vector=new Vector<Integer>(20); Si se rebasa la dimensión inicial guardando 21 elementos, la dimensión del vector se duplica. El programador ha de tener cuidado con este constructor, ya que si se pretende guardar un número grande de elementos se tiene que especificar el incremento de la capacidad del vector, si no se quiere desperdiciar inútilmente la memoria el ordenador.

Funcionamiento

Tercer Constructor Con el tercer constructor, se crea un vector cuya dimensión inicial es 10. Vector<Integer> vector=new Vector<Integer>(); La dimensión del vector se duplica si se rebasa la dimensión inicial, por ejemplo, cuando se pretende guardar once elementos. Al igual que el constructor anterior, es importante saber que el tamaño se ira duplicando cada que el Vector supere su tamaño.

Funcionamiento

add(Object o) | addElement(Object o) Ambos funciones permiten agregar un elemento al final del Vector, si la capacidad del mismo esta en su limite, esta función separará espacios de acuerdo al constructor usado. add(int index, Object o) Permite agregar un elemento en una posición valida del vector, si no hay nada en dicha posición, colocará el elemento, en caso contrario, desplazará hacia la derecha los elementos del vector. capacity() Regresa la capacidad actual del vector (cuantos elementos puede tener).

Funcionamiento

size() Regresa el número actual de elementos en el vector. clear() Vacia el vector remove(Object o) | removeElement(Object obj) Elimina del arreglo la primera ocurrencia del objeto proporcionado como parámetro.

Funcionamiento

remove(int index) | removeElementAt(int index) Elimina del arreglo el valor almacenado en la posición indicada, si existieran datos a su derecha, los mismo se recorrerían a la izquierda. set(int index, Object obj) Actualiza el valor almacenado en la posición dada por el objeto proporcionado.

LA MEJOR OPCIÓN

Estructuras de datos dinámicas que pueden crecer o disminuir según sea necesario

Diferencias

Diferencias

Escenarios preferentes

ArrayList:

  • Cuando no se necesita sincronización entre hilos.
  • Cuando se requiere un alto rendimiento para operaciones de inserción y eliminación.
  • Cuando se necesita trabajar con valores null.
Vector:
  • Cuando se necesita trabajar en un entorno multihilo.
  • Cuando se requiere compatibilidad con versiones anteriores de Java.

En resumen:

ArrayList: Es la opción preferida en la mayoría de los casos.Vector: Solo se debería usar si se necesita sincronización entre hilos.

Los elementos en un arreglo se acceden mediante un índice. El índice comienza en 0 y va hasta la longitud del arreglo menos 1.

Puedes obtener la longitud de un arreglo utilizando la propiedad length.

Puedes declarar un arreglo especificando el tipo de datos de sus elementos y utilizando corchetes. La inicialización puede hacerse al mismo tiempo o en pasos separados.

Puedes recorrer los elementos de un arreglo utilizando bucles como for o foreach.

¿Sabías que...

Truquito:

¿Sabías que...

Retenemos un 42% más de información cuando el contenido se mueve? Es quizá el recurso más efectivo para captar la atención detu alumnado.

La conexión emocional o engagement con tu contenido aumenta cuando consigues que tu clase se identifique con el mensaje que quieres transmitir.

En Genially encontrarás más de 1.000 plantillas listas para volcar tu contenido y 100% personalizables, que te ayudarán en tus clases?

Puedes tener arreglos de cualquier tipo de datos, incluyendo tipos primitivos y objetos.

Java permite la creación de arreglos multidimensionales, como matrices.

¿Sabías que...

Truquito:

¿Sabías que...

Retenemos un 42% más de información cuando el contenido se mueve? Es quizá el recurso más efectivo para captar la atención detu alumnado.

La conexión emocional o engagement con tu contenido aumenta cuando consigues que tu clase se identifique con el mensaje que quieres transmitir.

En Genially encontrarás más de 1.000 plantillas listas para volcar tu contenido y 100% personalizables, que te ayudarán en tus clases?

Declaración de Arreglos

Como podemos notar en el imagen, para declarar un arreglo unidimensional, necesitamos indicar al sistema de que tipo es y que de hecho se tratará de un arreglo la variable o atributo que estemos declarando, para ello seguiremos la notación: tipoDeDato[] nombreArreglo= new tipoDeDato[tamaño]; Donde el tipo de dato puede ser desde un tipo de datos primitivo hasta una clase que nosotros hayamos declarado en nuestro sistema. Mientras que el tamaño indicará el tamaño del arreglo. De igual manera podemos omitir lo anterior al colocar una lista de valores entre llaves "{ }" y separados por coma, en donde el número de elementos será el tamaño del arreglo.

Acceso a datos

Para poder guardar y/o modificar el valor en alguna posición valida del arreglo, usaremos la notación: nombreArreglo[índice] = valor; En este caso, el índice indicará la posición del arreglo en donde queremos guardar un nuevo dato, o bien, la posición en la cual queremos modificar un dato ya almacenado. En este caso es importante señalar lo siguiente: El mayor índice de un arreglo es igual a su tamaño menos uno. Por otro lado si lo que queremos es recuperar un valor almacenado en el arreglo usaremos una variable y para tener acceso al dato usaremos la notación: nombreArreglo[índice]. Esto se hace esta manera para evitar colocar una y otra vez el nombre del arreglo cuando lo que queremos es solor el valor almacenado.

¿Sabías que...

Truquito:

¿Sabías que...

Retenemos un 42% más de información cuando el contenido se mueve? Es quizá el recurso más efectivo para captar la atención detu alumnado.

La conexión emocional o engagement con tu contenido aumenta cuando consigues que tu clase se identifique con el mensaje que quieres transmitir.

En Genially encontrarás más de 1.000 plantillas listas para volcar tu contenido y 100% personalizables, que te ayudarán en tus clases?

Declaración de Matrices

Al igual que los arreglos unidimensionales, las matrices tienen una notación que es la siguiente: tipoDeDato[][] nombreMatriz= new tipoDeDato[numFilas][numColumnas]; En este caso los valores numFilas y numColumnas, indicarán el número de filas y columnas con las que contará la nueva matriz, es importante señalar que ambos valores deben ser proporcionados de lo contrario el sistema nos indicará un erro de sintaxis. De igual manera podemos omitir lo anterior al colocar una lista de listas entre llaves "{ }" y separados por comas, mientras los valores de cada lista se separan por comas como si fuera un arreglo unidimensional, en donde las dimensiones de la matriz serán el numero de listas y el número valores de cada lista.

Acceso a datos

Para poder guardar y/o modificar el valor en alguna posición valida del arreglo, usaremos la notación: nombreMatriz[fila][columna] = valor; En este caso, el valor de fila indicará la fila en la cual se colocará el valor, mientras columna indíca la posición de esa fila en la cual colocaremos el nuevo valor. Por otro lado si lo que queremos es recuperar un valor almacenado en una matriz usaremos una variable y para tener acceso al dato usaremos la notación: nombreMatriz[fila][columna]. Esto se hace esta manera para evitar colocar una y otra vez el nombre del arreglo cuando lo que queremos es solo el valor almacenado.