Publicado el 5 de Septiembre del 2020
609 visualizaciones desde el 5 de Septiembre del 2020
175,7 KB
26 paginas
Creado hace 22a (02/03/2003)
Programación en Java
Tema 2. El lenguaje de programación Java.
Arrays y cadenas
Luis Rodríguez Baena
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática
1
Arrays y colecciones
Hay dos formas de guardar varias referencias a objetos:
Arrays
Más eficiente.
Tamaño limitado.
Sólo puede almacenar referencias de un tipo.
Colecciones.
Menos eficiente.
Tamaño variable.
Almacena objetos sin tipo específico.
Clases genéricas List, Set y Map.
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
2
2
Declaración de arrays
No son un tipo de dato, sino una clase que extiende la clase Object.
Declaración.
modificadores tipo[] identificador;
Los modificadores se aplican al array, no a los elementos.
Asignar espacio de almacenamiento creando una instancia mediante
new.
int[] a = new int[5];
int b[];
b = new int[3];
length, indica el número de elementos.
Los índices van de 0 hasta length – 1.
Cualquier otro valor lanza la excepción ArrayIndexOutOfBoundException.
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
3
3
Inicialización de arrays (I)
Inicialización a los valores por omisión.
Un array de tipos primitivos inicializa los elementos a sus valores
por omisión.
Un array de referencias inicializa los elementos a referencias nulas
(null).
Un array de referencias no guarda el contenido del objeto, sino una
referencia a la instancia.
0
0
1
0
2
0
3
0
4
0
0
null
1
null
2
null
3
null
4
null
int a[] = new a[5];
a
String palabras[] = new String[5];
palabras
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
4
4
Inicialización de arrays (II)
Llenar el array.
Mediante asignaciones:
int[] a = new int[5];
//Carga de elementos en el array
//con números aleatorios entre 0 y 19.
for (int i=0;i<=a.length-1;i++)
a[i] = (int) (Math.random() * 20);
En arrays de referencia.
oH
l
a
0
null
1
null
2
null
3
4
null
palabras[3] = "Hola";
palabras
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
5
5
Inicialización de arrays (III)
Inicialización de arrays en la declaración.
Sólo se puede hacer en la declaración.
No se debe poner el tamaño del array.
Se crea espacio de almacenamiento y se rellena en la misma
declaración
char b[] = {'a','b','c'};.
Integer números[] = { new Integer(1),
new Integer(2),
new Integer(3)};
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
6
6
Asignación de arrays
Cuando se asigna un array
a otro array se copia la
referencia.
Copiar un array supone
asignar los elementos a
otro array.
0
null
1
null
2
null
3
4
null
String palabras2[] = palabras;
oH
l
a
palabras2
palabras
x
x
x
x
palabras2
0
null
1
null
2
null
3
4
null
palabras2[3] = “xxxx”
palabras
La clase System contiene un método para copiar arrays.
public static void arraycopy(Object origen, int posOrig,
Object dest, int posDest,
int length)
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
7
7
Arrays y métodos
Arrays y métodos.
Los métodos también pueden devolver arrays.
static int[] cargaArray(int n){
int[] a = new int[5];
for (int i=0;i<=a.length-1;i++)
return a;
a[i] = (int) (Math.random() * 20);
}
O recibir arrays como argumentos
En este caso, el array se pasa por referencia (como todos los objetos).
static void imprimirArray(Object[] v){
//Muestra los elementos del array
for (int i=0;i<=v.length-1;i++)
System.out.println("Elemento " + i + ": " + v[i]);
}
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
8
8
Arrays multidimensionales (I)
Declaración.
String [][] cad = new String[3][2];
String cad[][] = new String[3][];
cad[1] = new String[3];
String otra[] = {“hola”,”adios”};
cad[2] = otra;
null
null
null
null
null
null
null
null
null
hola
adios
cad
null
cad
otra
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
9
9
Arrays multidimensionales (II)
El atributo length en arrays multidimensionales.
a.length, devolvería el tamaño de la primera dimensión.
a[i].length, devolvería el tamaño de la fila i.
for(int i=0;i <= cad.length-1;i++){
System.out.println("Línea " + i );
if(cad[i] == null)
else
System.out.println(cad[i]);
for(int j=0;j<=cad[i].length-1;j++)
};
System.out.println(cad[i][j]+" ");
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
10
10
El array args
Contiene los argumentos pasados mediante la línea de órdenes.
class HolaMundo {
public static void main(String args[]) {
// Muestra "¡Hola mundo, hoy es dd-mm-aa!"
int conta = args.length;
System.out.print("!Hola ");
if(conta>0){
for(int i=0;i<=conta-1;i++)
System.out.println();
System.out.print(args[i] + ", ");
}
else
}
}
System.out.println("anónimo,");
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
11
11
La clase Arrays (I)
La bibilioteca java.utils contiene la clase Arrays con
funciones de utilidad para los arrays.
Sería necesario incorporar import java.utils.*; al comienzo
del archivo fuente.
Comparar arrays.
public static boolean equals(tipo[] a, tipo[] a2)
int v1[] = {1,2,3};
int v2[] = {1,2,3};
System.out.println(Arrays.equals(v1,v2));
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
12
12
La clase Arrays (II)
Rellenar arrays.
Rellenar el array a con el valor del segundo argumento.
public static void fill(tipo[] a, tipo val)
Rellenar el array a entre dos posiciones dadas con el valor del
segundo argumento.
public static void fill(tipo[] a, int desde, int hasta,
tipo val)
Ordenar arrays.
public static void sort(tipo[] a)
Buscar en arrays
public static int binarySearch( tipo[] a, tipo elemento)
Buscar el elemento en el array. Si lo encuentra devuelve su posición, si no
devuelve un número negativo con la posición donde debería estar.
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
13
13
Cadenas
Dos clases para almacenar cadenas.
String. Cadenas inmodificables.
Consume menos recursos.
StringBuffer. Cadenas modificables.
h
o
l
a
cad1
String cad1 = “hola”;
h
o
l
a
a
d
i
o
s
cad1
cad1 = “adios”
a
b
c
cad2
StringBuffer cad2 = “abc”;
a
b
c
d
e
f
cad2.append(“def”);
cad2
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
14
14
Constructores de String y StringBuffer
Se puede construir un objeto de la clase String como si se tratara de
un tipo de dato primitivo.
String cad1 = “hola”;
Constructores de String:
String(), crea una nueva cadena vacía.
String(String valor). Crea una nueva cadena a con el contenido de
String(StringBuffer sb). Crea una nueva cadena a partir de un
valor.
StringBuffer.
Constructores de StringBuffer:
de 16 caracteres.
StringBuffer(), crea una nueva cadena vacía con una capacidad inicial
StringBuffer(int longitud). Crea una nueva cadena vacía con una
StringBuffer(String str). Crea un nuevo StringBuffer a partir
capacidad inicial de longitud caracteres.
de una valor de tipo String.
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
15
15
Comparación de cadenas (I)
El operador de igualdad sólo compara si las referencias son
iguales.
String c1 = "hola";
String c2;
String c3 = new String(c1);
c2 = c1;
System.out.println(c1 == c2); //Devuelve true
System.out.println(c1 == c3); //Devuelve false
Método equals.
public boolean equals(String str)
System.out.println(c1.equals(c3)); //Devuelve true
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
16
16
Comparación de cadenas (II)
Método equalsIgnoreCase.
public boolean equalsIgnoreCase(String str)
c3 = "Hola";
System.out.println(c1.equalsIgnoreCase(c3)); //Devuelve true
Método compareTo.
public int compareTo(String str)
Devuelve 0 si las cadenas son iguales; mayor que 0 si la cadena que
invoca es mayor que str o menor que 0 si la cadena que invoca es
menor que str.
El número que devuelve es la direfencia entre los códigos del primer
carácter de la cadena.
c3 = "Hola";
System.out.println(c1.compareTo(c3)); //Devuelve 32
c3 = "Adios";
System.out.println(c3.compareTo(c1)); //Devuelve -39
Universidad Pontificia de Salamanca (campus Madrid)
Facultad de Informática ©Luis Rodríguez Baena, 2003
17
17
Comparación de cadenas (III)
Método compareToIgnoreCase.
public int compareToIgnoreCase(String str)
c3 = "Hola";
System.out.println(c1.compareToIgnoreCase(c3)); //Devuelve 0
c3 = "Adios";
System.out.println(c3.compareToIgnoreCase(c2)); //Devuelve -7
Comparar con StringBuffer.
public boolean contentEquals(StringBuffer sb)
StringBuffer sb1 = new StringBuffer(“hola”);
System.out.println(c1.c
Comentarios de: Tema 2. El lenguaje de programación Java. Arrays y cadenas - Programación en Java (0)
No hay comentarios