Está en la página 1de 15

TEMA 7. ESTRUCTURAS DE ALMACENAMIENTO.

Objetivos

 Conocer las diferencias entre el almacenamiento en memoria y el persistente endisco.


 Comprender la importancia y utilidad de las estructuras de almacenamiento en
memoria.
 Resolver problemas utilizandoarrays.
 Comprender y saber aplicar los algoritmos deordenación.
 Estudiar los vectores deobjetos.

Contenidos

7.1.- Arrays o Vectores.


Un array o vector es una estructura de almacenamiento que permite almacenar "n" elementos
en posiciones consecutivas de memoria, accesibles mediante un índice. Por ejemplo, para
acceder al elemento 4 del array temperaturas utilizaremos el valor de índice 4:

temperaturas[4]

Los elementos que almacena el array pueden ser de tipo básico (int, byte, boolean, etc…) u
objetos.

En un array es todos los elementos del array tienen el mismo tipo de datos, la longitud del
array se establece al crearlo y el número de elementos no puede ser modificado en tiempo de
ejecución. No podremos ni eliminar posiciones, ni insertarposiciones.

En Java podemos declarar un array de diferentes formas:

tipo[] nombreArray;
tipo nombreArray[];

Por ejemplo, podemos declarar un array de temperaturas del siguiente modo:

double[] tempetaturas;

Podemos crear el vector temperaturas como si fuesen objetos:

tempetaturas = new double[7];

PROGRAMACIÓN - CICLO FORMATIVO DAM/DAW - TEMA 7. ESTRUCTURAS DE 1


ALMACENAMIENTO
También podemos declarar y crear el array con sólo una sentencia:

double[] tempetaturas = new double[7];

Los arrays reservan "n" posiciones de memoria empezando en el índice "0" y terminando en el
índice "n-1". Si intentamos acceder a una posición fuera del array se produce un error y se
lanza una excepción que debemos controlar.

Los arrays si inicializan automáticamente de forma predeterminada: objetos a null, caracter a


'\u0000' carácter nulo que se imprime como un espacio, números a 0 y booleanos a false.

double[] temperatura = new double[30];

También es posible inicializar con los valores que se desea:

double[] temperaturaSemana = {10.5, 6.9, 14.6, 18.4, 14.0, 17.8, 19.2};

Por último, podemos asignar valores a las posiciones del array accediendo directamente al
índice:

temperatura[0] = 23.4;

Número de elementos de un array.


El método length nos devuelve el número de elementos en array.

Ejemplo:

temperatura.length;

Recorrer Array.
Podemos recorrer una array de elementos utilizando un bucle for y una variable indice.
Ejemplo:

for (int i = 0; i<temperatura.length; i++){


System.out.println(temperatura[i]);
}

También podemos recorrer el array con el blucle enhanced o mejrado utilizando un bucle for
con el tipo de dato, la variable que tomará cada uno de los valores del array, dos puntos : y el
propio array.

for (double t:temperatura){


System.out.println(t);
}

PROGRAMACIÓN - CICLO FORMATIVO DAM/DAW - TEMA 7. ESTRUCTURAS DE 2


ALMACENAMIENTO
7.2.- Métodos sobre Arrays.
a) clone.
Permite crear una copia de un array tratandose de dos arrays diferentes con los mismos elementos.

Ejemplo:

double[] temperaturaSemana1 = {10.5, 6.9, 14.6, 18.4, 14.0, 17.8, 19.2};


double[] temperaturaSemana3 = temperaturaSemana1.clone();

b) equals.
Permite comprobar si dos referencias son el mismo objeto.

Ejemplo:

double[] temperaturaSemana1 = {10.5, 6.9, 14.6, 18.4, 14.0, 17.8, 19.2};


double[] temperaturaSemana3 = temperaturaSemana1.clone();
double[] temperaturaSemana2 = temperaturaSemana1;

if (temperaturaSemana1.equals(temperaturaSemana2)) {
System.out.println("El array es el mismo");
} else {
System.out.println("El array NO es el mismo");
}

if (temperaturaSemana3.equals(temperaturaSemana1)) {
System.out.println("El array es el mismo");
} else {
System.out.println("El array NO es el mismo");
}

c) Arrays.equals(array1,array2)
Permite comprobar si dos arrays son iguales. Precisa importar la clase java.util.Arrays;

Ejemplo:
int[] elementos = {5,3,7,9,1,2,0,4,6,8};
int[] valores = {5,3,7,9,1,2,0,4,6,8};
int[] datos = {2,5,7,3};

System.out.println(Arrays.equals(elementos,valores));
System.out.println(Arrays.equals(datos,valores));

d) toString().
Permite mostrar todo el contenido del array como una cadena. Precisa importar la clase
java.util.Arrays;

Ejemplo:
System.out.println(Arrays.toString(temperaturaSemana1));

PROGRAMACIÓN - CICLO FORMATIVO DAM/DAW - TEMA 7. ESTRUCTURAS DE 3


ALMACENAMIENTO
e) sort()
Ordena un array o parte de un array. Precisa importar la clase java.util.Arrays;

Ordenamos parte de las posiciones del array con el método:


Arrays.sort(array, posInicial, posFinal);

Ordenamos todas las posiciones del array con el método:


Arrays.sort(array);

Ejemplo:
int[] elementos = {5,3,7,9,1,2,0,4,6,8};
Arrays.sort(elementos,3,7);
System.out.println(Arrays.toString(elementos));
Arrays.sort(elementos);
System.out.println(Arrays.toString(elementos));

f) Arrays.binarySearch(array,valor)
Devuelve la posición en la que se encuentra un valor dentro de un array. El array debe estar
previamente ordenado. En caso de no encontrarlo devuelve el signo menos y la posición del
array en la que se insertaría. Precisa importar la clase java.util.Arrays;

Ejemplo:
System.out.println(Arrays.binarySearch(elementos,5));
System.out.println(Arrays.binarySearch(elementos,12));

g) fill()
Asigna valores a todo o parte de un array. Precisa importar la clase java.util.Arrays;

Rellena parte de las posiciones del array con un valor:


Arrays.fill(array, posInicial, posFinal, valor);

Rellena todas las posiciones del array con un valor:


Arrays.fill(array, valor);

Ejemplo:
String[] nombres = {"Luis", "Pedro", "Ana", "Rosa", "María"};
Arrays.fill(valores,3,7,-1);
System.out.println(Arrays.toString(valores));
Arrays.fill(valores,2);
System.out.println(Arrays.toString(valores));
Arrays.fill(nombres,"Nada");
System.out.println(Arrays.toString(nombres));

PROGRAMACIÓN - CICLO FORMATIVO DAM/DAW - TEMA 7. ESTRUCTURAS DE 4


ALMACENAMIENTO
h) copyOf()
Copia un array en otro indicando el nuevo número de elementos. Precisa importar la clase
java.util.Arrays

Arrays.copyOf(array, elementos);

Ejemplo:
int[] edades = {18, 24, 31};
int[] masEdades = Arrays.copyOf(edades, 5);

masEdades[3] =43;
masEdades[4] =55;

i) copyOfRange()
Este método crea una copia de elementos dentro de un rango específico del array original
desde la posición inicial hasta el elemento anterior a la posición final. Precisa importar la clase
java.util.Arrays

Arrays.copyOfRange(array, posInicial, posFinal);

Ejemplo:
int[] menosEdades = Arrays.copyOfRange(masEdades, 1, 3);

j) arraycopy()
Copia a partir de una posición del array origen en una posición del array de destino tantos
elementos como se indiquen.

System.arraycopy(arrayOrigen, posOrigen, arrayDestino, posDestino, numElementos);

Ejemplo:
int[] origen = { 21, 42, 53, 4, 35};
int[] destino = {0, 2, 5, 9, 14, 3, 7, 6};

System.arraycopy(origen, 1, destino, 4, 3);


System.out.println(Arrays.toString(destino));

7.3.- Arrays multidimensionales o matrices.


Un array multidimensional o matriz en un array de dos dimensiones similar a una cuadrícula.

Podemos declarar un array multidimensional de enteros con 4 filas y 3 columnas del siguiente
modo:
int[][] datos = new int[4][3] ;

PROGRAMACIÓN - CICLO FORMATIVO DAM/DAW - TEMA 7. ESTRUCTURAS DE 5


ALMACENAMIENTO
Para asignar un valor a una posición del array multidimensional utilizaremos posiciones de fila
ycolumna.

Ejemplo:
datos[2][1]=24;

Para declarar una variable array multidimensional utilizaremos :


tipoDato[][] nombreArray;

Podemos crear un array multidimensional y asignarlo a la variable:


nombreArray = new tipoDato[filas][columnas];

Podemos declarar y crear el array multidimensional en un solo paso:


tipoDato[][] nombreArray = new tipoDato[filas][columnas];

Por último, si queremos declarar, crear e inicializar un array multidimensional, podemos


realizarlo con la sentencia:
tipoDato[][] nombreArray = { {valor1, valor2, valor3} ,
{valor4, valor5,valor 6}
};

Por lo tanto, un array bidimensional es un array de arrays en el que por ejemplo. un array 4 x3
es un array de 4 elementos, en el que cada uno de ellos es un array de 3elementos.

int[][] datos = new int[4][3];

En datos*0+ es un array de 3 elementos, … y en datos*3+ es un array de 3elementos.

También podemos tener arrays bidimensionales no cuadradas en el que cada fila tiene un
número diferente de columnas:

Ejemplo:
int[][] numeros = new int[4][];
numeros[0]=new int[7];
numeros[1]=new int[4];
numeros[2]=new int[1];
numeros[3]=new int[3];

Longitud del array multidimensional.


El atributo length, nos devuelve el número de elementos o longitud del array. Por lo tanto,
miArray.length //devuelve el número defilas.
miArray[0].length //devuelve el número de columnas de la primera fila
miArray[1].length // devuelve el número de columnas de la segundafila

PROGRAMACIÓN - CICLO FORMATIVO DAM/DAW - TEMA 7. ESTRUCTURAS DE 6


ALMACENAMIENTO
Recorrido de los elementos de un array multidimensional.
Podemos recorrer un array multidimensional utilizando un bucle con contador.

double[][] matriz={ {1,2,3,4}, {5,6}, {7,8,9,10,11,12}, {13} };


for (int i=0; i < matriz.length; i++) {
for (int j=0; j < matriz[i].length; j++) {
System.out.print(matriz[i][j]+"\t");
}
System.out.println("");
}

También podemos recorrer un array multidimensional utilizando un bucle enhanced


(mejorado).

double[][] matriz={ {1,2,3,4}, {5,6}, {7,8,9,10,11,12}, {13} };


for (double[] fila : matriz) {
for (double dato : fila){
System.out.print(dato + " ");
}
System.out.println();
}

7.4.- Cadenas de Caracteres.


Las cadenas de caracteres son objetos de la clase String. Un Strings es un array de elementos
de tipo char.

a) Métodolength().
Si precisamos saber la longitud de una cadena utilizaremos el método length:
cadena.length()

Utilizaremos el símbolo + para concatenar cadenas de caracteres:

System.out.println("Nombre: "+ nombre);

Ejemplo:
String nombre = "Mario";
String apellidos = "Garcia Atienza";
String nombreCompleto = nombre + " "+ apellidos;
System.out.println(nombreCompleto);
System.out.println("Caracteres: " + nombreCompleto.length());

b) Método concat().
Devuelve el resultado de unir dos cadenas.

Ejemplo:
String miNombre = "Mario";

PROGRAMACIÓN - CICLO FORMATIVO DAM/DAW - TEMA 7. ESTRUCTURAS DE 7


ALMACENAMIENTO
String misApellidos = " Garcia Atienza";
String nombreCompleto = miNombre.concat(misApellidos);
System.out.println(nombreCompleto);

c) Método toString().
Devuelve el propio String.

Ejemplo:
String miNombre = "Mario";
System.out.println(nombre.toString());

d) Métodoequals().
Compara dos objetos de tipo String.

Ejemplo:
System.out.println(nombre.equals(apellidos));

El operador == compara si se trata del mismo objeto o de objetos diferentes:

String marca = "Seat";


String marcaCopia = marca;

if (marca==marcaCopia){
System.out.println("Se trata del mismo Objeto");
}else {
System.out.println("Son objetos diferentes");
}

e) Método compareTo().
Compara dos cadenas distinguiendo mayúsculas de minúsculas. Hay que tener en cuenta que
la "A" es menor que la "a".

cadena.compareTo(texto)

Devuelve negativo si cadena es menor que texto. Devuelve positivo si cadena es mayor que
texto y devuelve 0 si son iguales.

Ejemplo:
String miMarca = "Ford";
String tuMarca = "ford";

System.out.println(miMarca.compareTo(tuMarca));

PROGRAMACIÓN - CICLO FORMATIVO DAM/DAW - TEMA 7. ESTRUCTURAS DE 8


ALMACENAMIENTO
f) Método trim().
Elimina espacios sobrantes antes y después del texto.

Ejemplo:
String nombreConEspacios= " Mario García ";
String nombreSinEspacios = nombreConEspacios.trim();
System.out.println(nombreConEspacios.length());
System.out.println(nombreSinEspacios.length());

f) Método toLowerCase().
Convierte un String a minúsculas.

Ejemplo:
String profesion= "INFORMATICO";
System.out.println(profesion.toLowerCase());

g) Método toUpperCase().
Convierte un String amayúsculas.

Ejemplo:
String especialidad= "seguridad";
System.out.println(especialidad.toUpperCase());

h) Métodoreplace().
Reemplaza todas las ocurrencias de un carácter/cadena en una cadena por otro
carácter/cadena.
Ejemplo:
String profesion= "INFORMATICO";
System.out.println(profesion.replace("O","A"));

h) Métodosubstring().
Devuelve una subcadena de un String desde una posición inicial hasta antes de la posición
final. Si no se indica posición final devuelve hasta el final de la cadena.

String profesion= "INFORMATICO";


System.out.println(profesion.substring(2,7));
System.out.println(profesion.substring(2));

i) MétodostartsWith().
Devuelve true si el String comienza por una cadena pasada como parámetro.

String profesion= "INFORMATICO";


System.out.println(profesion.startsWith("INFOR"));
System.out.println(profesion.startsWith("MATICO"));

PROGRAMACIÓN - CICLO FORMATIVO DAM/DAW - TEMA 7. ESTRUCTURAS DE 9


ALMACENAMIENTO
j) MétodoendsWith().
Devuelve true si el String termina por una cadena pasada como parámetro.

String profesion= "INFORMATICO";


System.out.println(profesion.endsWith("INFOR"));
System.out.println(profesion.endsWith("MATICO"));

k) Método charAt().
Devuelve el carácter que ocupa la posición pasada como parámetro. Las posiciones comienzan
en 0 y el valor del parámetro no puede superar el número máximo de caracteres, ya que en
caso contrario lanzará una Excepción.

String profesion= "INFORMATICO";


System.out.println(profesion.charAt(5));
System.out.println(profesion.charAt(15));

l) Método indexOf(),lastIndexOf().
Devuelve la posición en la que se encuentra la primera/última ocurrencia de un carácter o una
subcadena en una cadena. Si no aparece devolverá el valor -1.

String profesion= "INFORMATICO";


System.out.println(profesion.indexOf('O'));
System.out.println(profesion.indexOf('O'));
System.out.println(profesion.indexOf("MAT"));
System.out.println(profesion.indexOf("NAT"));

m) MétodotoCharArray().
Devuelve un array de caracteres a partir de un String.

String profesion= "INFORMATICO";


char[] letras;
letras=profesion.toCharArray();
for(char l:letras){
System.out.println(l);
}

n) MétodovalueOf().
Convierte un número en un String.

int altura = 156;


String medida = String.valueOf(altura);
System.out.println("Número de dígitos: "+medida.length());

7.5.- Listas.
La clase ArrayList permite almacenar datos en memoria de forma similar a los Arrays, con la
ventaja de que el número de elementos que almacena, lo hace de forma dinámica, es decir,

PROGRAMACIÓN - CICLO FORMATIVO DAW - TEMA 7. ESTRUCTURAS DE ALMACENAMIENTO 10


que no es necesario declarar su tamaño como pasa con los Arrays. La clase ArrayList ofrece
métodos para las operaciones comunes, tal como insertar o eliminar elementos. Debemos
importar java.util.ArrayList.

Durante la declaración se puede indicar el tipo de los elementos.

ArrayList<tipoElementos> nombreLista = new ArrayList<>();

No admite tipos primitivos pero si objetos y por tanto wrappers.

Ejemplo :
ArrayList<String> miListaNombres = new ArrayList<>();

No es estrictamente necesario indicar el tipo de dato por lo que se permiten listas


heterogéneas de datos, aunque es recomendable especificar el tipo de datos que va a
contener la lista y así poder emplear las operaciones y métodos adecuados para el tipo de
datosmanejado.

Ejemplo :
ArrayList miListaDatos = new ArrayList();
miListaDatos.add(1);
miListaDatos.add(4.6);
miListaDatos.add(true);
miListaDatos.add("Java");
System.out.println(miListaDatos.toString());

ArrayList dispone de los siguientes métodos:


 add: añade unelemento. add(elemento) o add(posicion, elemento)
 get: retorna un elemento.get(posicion)
 remove: elimina uneleme nto. remove(elemento) oremove(posicion)
 set: cambia unelemento. set(posicion,valor)
 size: longitud de lalista. size()
 contains: comprueba se existe unelemento. contains(elemento)
 indexOf: posición de la primera ocurrencia de unelemento. indexOf(elemento)
 lastIndexOf: posición de la última ocurrencia de unelemento. lastIndexOf(elemento)
 clear: borra todos loselementos. clear()
 isEmpty: devuelve true si la lista estavacia. isEmpty()
 clone: copia unArrayList. clone()
 toArray: convierte una lista en unarray. toArray()
 toString(): permite mostrar el contenidos delArrayList. toString()

Ejemplo :
ArrayList<String> miListaNombres = new ArrayList<>();
miListaNombres.add("Luis");
miListaNombres.add(0,"Pedro");

PROGRAMACIÓN - CICLO FORMATIVO DAW - TEMA 7. ESTRUCTURAS DE ALMACENAMIENTO 11


miListaNombres.set(1, "Ana");
miListaNombres.add("Rosa");
miListaNombres.remove("Ana");
miListaNombres.remove(0);
for(int i=0; i<miListaNombres.size();i++){
System.out.println(miListaNombres.get(i));
}

Ejemplo con Wrapper de tipo Double:


ArrayList<Double> miLista = new ArrayList<>();
miLista.add(4.5);
miLista.add(0,7.0);
miLista.set(1, 9.1);
miLista.add(3.5);
miLista.remove(7.0);
miLista.remove(0);
for(int i=0; i<miLista.size();i++){
System.out.println(miLista.get(i));
}

Los Iteradores sirven para recorrer los ArrayList. Los Iteradores tienen tres métodos:
 hasNext(): para comprobar si quedan elementos en eliterador.
 next(): para devolver el siguiente elemento deliterador.
 remove(): para eliminar el elemento delIterador.

Ejemplo:
ArrayList<String> miLista = new ArrayList<>();
for (int i=1; i<=10; i++){
miLista.add("Elemento "+i);
}
Iterator<String> bucle = miLista.iterator();
while(bucle.hasNext()){
String elemento = bucle.next();
System.out.print(elemento+" / ");
}

Ejemplo:
if(miListaNombres.contains("Marta")){
System.out.println("El elemento Existe");
} else {
System.out.println("El elemento NO Existe");
}

if(miListaNombres.contains("Ana")){
System.out.println("El elemento Existe");
} else {
System.out.println("El elemento NO Existe");
}

PROGRAMACIÓN - CICLO FORMATIVO DAW - TEMA 7. ESTRUCTURAS DE ALMACENAMIENTO 12


Ejemplo:
if(miListaNombres.isEmpty()){
System.out.println("Vacio");
}else {
System.out.println("Tiene Datos");
}

miListaNombres.clear();

if(miListaNombres.isEmpty()){
System.out.println("Vacio");
}else {
System.out.println("Tiene Datos");
}

Ejemplo:
ArrayList<String> miListaClonada;
miListaClonada = (ArrayList<String>)miListaNombres.clone();
System.out.println(miListaClonada.toString());

Ejemplo:
String arrayNombres[] = new String[miListaNombres.size()];
arrayNombres = miListaNombres.toArray(arrayNombres);
for(String n:arrayNombres){
System.out.println(n);
}

7.6.- Clase Map.


La clase Map nos permite representar una estructura de datos para almacenar pares
"clave/valor" de tal manera que para una clave solamente tenemos un valor. Debemos
importar la clase java.io.Map de Java.

Al declarar de un Map (HashMap) las claves pueden ser de cualquier tipo de objetos, aunque
los más utilizados como clave son los objetos predefinidos de Java como String, Integer,
Double ... pero no permiten datosprimitivos.

Por ejemplo: Para crear un Map con clave "Integer" y Valor "String" utilizaremos:

Map<Integer, String> miMap = new HashMap();

a) Método put(clave, valor).


Añade un elemento alMap.

Ejemplo:
coche.put("Marca", "Ford");

PROGRAMACIÓN - CICLO FORMATIVO DAW - TEMA 7. ESTRUCTURAS DE ALMACENAMIENTO 13


coche.put("Modelo", "Kuga");
coche.put("Precio", "29000");
coche.put("Extras", "FullEquip");

b) Método get(Kclave).
Devuelve el valor de la clave que se le pasa como parámetro o 'null' si la clave no existe.

Ejemplo:
coche.get("Marca");

c) Método keySet().
Se usa para obtener las claves contenidas en este mapa.

Ejemplo:
for (String clave : coche.keySet()) {
String valor = coche.get(clave);
System.out.println("Clave = " + clave + ", Valor = " + valor);
}

d) Métodosize().
Devuelve el número de elementos del Map.

Ejemplo:
System.out.println("Elementos: "+ coche.size());

e) Métodovalues().
Devuelve los valores del Map.

Ejemplo:
System.out.println(coche.values());

f) MétodoisEmpty().
Devuelve true si no hay elementos en el Map y en caso contrario false.

Ejemplo:
System.out.println(coche.isEmpty());

g) Métodoremove(clave).
Borra el par clave/valor de la clave que se le pasa como parámetro.

Ejemplo:
coche.remove("Extras")

PROGRAMACIÓN - CICLO FORMATIVO DAW - TEMA 7. ESTRUCTURAS DE ALMACENAMIENTO 14


h) Método containsKey(clave).
Devuelve true si en el map hay una clave que coincide con la clave pasada como parámetro.

Ejemplo:
System.out.println(coche.containsKey("Marca"));
System.out.println(coche.containsKey("Cilindrada"));

i) MétodocontainsValue(valor).
Devuelve true si en el map hay un Valor que coincide con el valor pasado como parámetro.

Ejemplo:
System.out.println(coche.containsValue("29000"));
System.out.println(coche.containsValue("Seat"));

j) Método clear().
Borra todos los componentes del Map.

Ejemplo:
coche.clear();

7.7.- Ficheros JAR.


Los ficheros JAR permiten distribuir las aplicaciones que contienen múltiples ficheros (clases,
datos, sonido, imágenes, etc..) en un solo fichero empaquetado.

Para crear un fichero JAR desde Netbeans debemos pulsar botón derecho sobre el proyecto y
pulsar Propiedades. En el apartado Empaquetado marcamos la opción "Comprimir archivo
JAR" yAceptar.

En el entorno de Netbeans pulsamos el botón "Limpiar y Generar Proyecto" de la barra de


botones.

En la carpeta "dist" de nuestro proyecto se habrá creado el fichero empaquetado .JAR

Para ejecutar el fichero JAR, desde la línea de comandos introducimos la instrucción:

java -jar nombreProyecto.jar

PROGRAMACIÓN - CICLO FORMATIVO DAW - TEMA 7. ESTRUCTURAS DE ALMACENAMIENTO 15

También podría gustarte