Tema 4. Clases de utilidad

Anuncio
Tema 4. Clases de utilidad
„
„
„
„
„
„
„
Arrays
Clases String, StringBuffer y StringTokenizer
Wrappers
Clase Math
Entrada/salida de datos
Java Collections Framework (JCF)
Clases para manejo de fechas y horas
1
Arrays
„
Características
„
„
„
„
„
Se crean con el operador new seguido del tipo y número de
elementos
Nº de elementos del array: variable miembro implícita
length (Ej: vec.length)
Se puede acceder a los elementos de un array con los
corchetes [] y un índice que varía de 0 a length-1
Pueden crearse arrays anónimos
Creación
double []x;
x = new double [100];
Referencia a un array
double [] x = new double [100];
2
Ejemplos creación arrays
„
„
„
„
Creación array de 10 enteros, inicializados por defecto a 0
int []v = new int [10];
Creación array inicializado con valores
int []v = {0,1,2,3,4,5,6,7,8,9};
String []dias={“lunes”,”martes”,”miercoles”,”jueves”};
Array de 5 objetos
MiClase []listaObj=new MiClase[5];
for(i=0;i<5;i++) listaObj[i]=new MiClase();
Array anónimo
obj.metodo(new []String = {“uno”,”dos”,”tres”});
3
Arrays bidimensionales
„
„
Una matriz es un vector de vectores fila
Creación
„
Opción 1:
int [][] mat = new int[nifilas][ncols];
„
Opción 2:
int [][] mat;
// referencia a matriz
// creación del vector de referencias a las filas
mat = new int [nfilas][];
// reserva de memoria para las filas
for(int i = 0;i<nfilas;i++) mat[i]=new int [ncols];
„
Creación + inicialización:
int [][] mat = {{1,2,3},{4,5,6}};
4
Clases String y StringBuffer
„
Orientadas a manejar cadenas de caracteres
„
String: manejo de cadenas de caracteres
constantes
„
„
StringBuffer: permite modificar la cadena:
inserciones, borrados, ...
„
„
Más eficiente
Más posibilidades
Pertenecen al paquete java.lang
„
No hay que importar las clases
5
Clase String
„
Creación:
„
„
String str1 = “hola”;
Métodos:
„
„
„
„
„
char charAt(int index)
Devuelve el carácter de la posición especificada
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
Copia caracteres en la posición indicada de un array de caracteres
int indexOf(String str, int fromIndex)
Devuelve la posición en la que aparece por 1ª vez str a partir de la
posición indicada
int length()
Devuelve la longitud de la cadena
String substring(int beginIndex, int endIndex)
Devuelve una subcadena
6
Clase StringBuffer (i)
„
„
Se utiliza cuando se desea modificar una cadena de
caracteres
Constructores:
„
„
„
StringBuffer()
Crea un StringBuffer sin caracteres con una capacidad inicial
de 16 caracteres
StringBuffer(int length)
Crea un StringBuffer sin caracteres con una capacidad inicial
especificado por el argumento length
StringBuffer(String str)
Crea un StringBuffer a partir de un String
7
Clase StringBuffer (ii)
„
Métodos:
„
„
„
„
„
„
„
StringBuffer append(...) → Diferentes definiciones para
añadir un String o una variable al StringBuffer
int capacity() → Devuelve la capacidad del StringBuffer
StringBuffer delete(int start, int end) → Elimina los
caracteres en una subcadena del StringBuffer
StringBuffer insert(int,...) → Inserta un String o un valor
en la posición especificada del StringBuffer
StringBuffer reverse() → Cambia el orden de los
caracteres
void setLength(int newLength) → Cambia el tamaño del
StringBuffer
String toString() → Convierte a String
8
Clase StringTokenizer
„
„
„
Permite separar en tokens una cadena.
Pertenece al paquete java.lang
Ejemplo:
StringTokenizer st=new StringTokenizer(cadena);
int n = st.countTokens();
String []tokens = new String [n];
for(int i=0;st.hasMoreTokens();i++){
tokens[i]=st.nextToken();
}
9
Wrappers
„
Son clases diseñadas como complemento de los tipos
primitivos
„
„
Wrapper (envoltorio)
„
„
„
Los tipos primitivos son los únicos elementos de Java que no
son objetos
„ Se pasan por valor → no pueden modificarse
Objeto cuya variable miembro es un tipo primitivo
Proporcionan métodos para realizar tareas con los tipos
primitivos (ej: conversión a cadena de caracteres)
Existe una clase Wrapper para cada tipo primitivo
numérico:
„
Clases Byte, Short, Integer, Long, Float y Double
10
Clase Double
„
Jerarquía
„
„
Métodos
„
„
„
„
„
java.lang.Object ← java.lang.Number ← java.lang.Double
Double(double) y Double(String) → Constructores
double doubleValue(), float floatValue(), long longValue(),
int intValue(), short shortValue() y byte byteValue() →
Métodos para obtener el valor del tipo primitivo
String toString() y Double valueOf(String) → Conversores
con la clase String
boolean isInfinite() y boolean isNaN() → Chequeo de
condiciones
Constantes
„
MAX_VALUE, MIN_VALUE, NaN, NEGATIVE_INFINITE,
POSITIVE_INFINITE
11
Clase Integer
„
Jerarquía
„
„
Métodos
„
„
„
„
„
java.lang.Object ← java.lang.Number ← java.lang.Integer
Integer(int) y Integer(String) → Constructores
double doubleValue(), float floatValue(), long longValue(),
int intValue(), short shortValue() y byte byteValue() →
Métodos para obtener el valor del tipo primitivo
String toString() y Integer valueOf(String) → Conversores
con la clase String
String toBinaryString(int), String toHexString(int), String
toOctalString(int) → Conversores a cadenas en distintas
bases
Constantes
„
MAX_VALUE, MIN_VALUE
12
Ejemplo Wrappers
„
Conversión de cadena a número:
String numIntString = "1001";
„ Opción 1:
„
„
Opción 2:
„
„
int numInt = Integer.valueOf(numIntString).intValue();
int numInt = Integer.parseInt(numIntString);
Conversión de número a cadena:
int numInt=5;
String cadena=Integer.toString(numInt)
13
Clase Math
„
„
Jerarquía: java.lang.Object ← java.lang.Math
Proporciona métodos static para realizar
operaciones matemáticas
„
„
„
„
„
„
„
double acos(double a), double asin(double a), double
atan(double a),
double sin(double a), double cos(double a)
double exp(double a)
double log(double a)
double pow(double a,double b)
...
Proporciona las constantes E y PI
14
Entrada/Salida de datos (1)
„
„
Lectura de datos:
„
Escritura de datos:
Lectura
Escritura
abrir un stream
Mientras más información
leer información
cerrar el stream
abrir un stream
mientras más información
escribir información
cerrar el stream
Paquete java.io:
„
„
Colección de clases de stream para leer y
escribir
Están divididas en streams de caracteres y
bytes
15
Entrada/Salida de datos (2)
„
Streams de caracteres
• Clases para leer y escribir
caracteres de 16 bits
• Clases que leen o escriben
en destinos o fuentes de
datos (sombreado)
• Clases que realizan algún
tipo de procesamiento (resto)
16
Entrada/Salida de datos (3)
„
Streams de bytes
• Clases para leer y escribir
bytes (8 bits)
• Streams de destinos o
fuentes (sombreado)
• Streams de procesamiento
(resto)
17
Entrada/Salida de datos (4)
„
Ejemplo: Copia de un fichero de texto
import java.io.*;
public class Copiar
{
public static void main(String[] args) throws
IOException
{
File ficheroEntrada = new File("origen.txt");
File ficheroSalida = new File("destino.txt");
FileReader in = new FileReader(ficheroEntrada);
FileWriter out = new FileWriter(ficheroSalida);
int c;
while ((c = in.read()) != -1) out.write(c);
in.close();
out.close();
}
}
18
Java Collections Framework
„
JCF (estructura de colecciones de Java):
„
„
„
„
Conjunto de clases e interfaces para
trabajar con colecciones de objetos
Introducida en la versión 1.2 del JDK
Jerarquía de interfaces
Jerarquía de clases
19
Jerarquía de interfaces
Collection
Map
Set
List
HashSet
ArrayList
SortedSet
TreeSet
LinkedList
HashMap
WeakHashMap Las interfaces determinan
HashTable
Vector
SortedMap
Stack
TreeMap
Comparable
Iterator
Comparator
ListIterator
las capacidades de las
clases que implementan
Ej: Las clases ArrayList y LinkedList
implementan la interface List. Disponen
de los mismos métodos y se pueden
utilizar de la misma forma. La diferencia
está en la implementación
20
Jerarquía de clases
AbstractCollection
AbstractSet
HashSet
TreeSet
AbstractList
ArrayList
AbstractMap
TreeMap
HashMap
AbstractSequentialList
LinkedList
WeakHashMap
Collections
Arrays
9 Collections y Arrays no son abstract, pero no tienen constructores.
Contienen métodos para operaciones de ordenación, búsqueda, ...
21
Interfaces de la JCF
„
„
„
„
„
„
Collection: Define métodos para tratar una
colección genérica de elementos
Set: Colección que no admite elementos repetidos
SortedSet: Set cuyos elementos se mantienen
ordenados según el criterio establecido
List: Admite elementos repetidos y mantiene un
orden inicial
Map: Cjto. pares clave/valor (sin repetición de
claves)
SortedMap: Map cuyos elementos se mantienen
ordenados según el criterio establecido
22
Interfaces de soporte
„
„
„
„
Iterator: Dispone de métodos para recorrer una
colección y borrar elementos
ListIterator: Permite recorrer listas en ambos
sentidos
Comparable: Declara el método compareTo() que
permite ordenar las colecciones según un orden
natural (String,Date, Integer, ...)
Comparator: Declara el método compare() y se
utiliza en lugar de Comparable cuando se desea
ordenar objetos no estándar
23
Clases de propósito general
„
„
„
„
„
„
„
HashSet: Interface Set implementada mediante una hash table
(tabla dispersa)
TreeSet: Interface SortedSet implementada mediante un
árbol binario ordenado
ArrayList: Interface List implementada mediante un array
LinkedList: Interface List implementada mediante una lista
enlazada
HashMap: Interface Map implementada mediante una hash
table
WeakHashMap: Interface Map implementada de modo que la
memoria de los pares clave/valor pueda ser liberada cuando las
claves no tengan referencia desde el exterior de la
WeakHashMap
TreeMap: Interface SortedMap implementada mediante un
árbol binario
24
Clases adicionales
„
Clases históricas
„
„
„
„
Clase Collections
„
„
Clases Vector, Stack y HashTable
No siguen las reglas de diseño del JCF
Se han mantenido por motivos de compatibilidad
Dispone métodos static para ordenar,
desordenar, invertir el orden, realizar búsquedas,
llenar, copiar, hallar el mínimo y hallar el máximo
Clase Arrays
„
Contiene métodos static para ordenar, llenar,
realizar búsquedas y comparar los arrays clásicos
25
Clases relacionadas con fechas
y horas
„
„
Clase Date
Clase Calendar
„
„
Clase DateFormat
„
„
Clase GregorianCalendar
Clase SimpleDateFormat
Clase TimeZone
„
Clase SimpleTimeZone
26
Clase Date
„
Representa un instante de tiempo con precisión de
milisegundos (ms)
„
„
La información se almacena en un entero long de 64 bits
que contiene los ms desde las 00:00:00 del 1/1/1970 GMT
(Greenwich mean time)
Métodos
„
„
„
„
Date() → crea un objeto a partir de la fecha y hora del
ordenador
Date(long) → crea un objeto a partir de los ms
transcurridos desde el 1/1/1970, 00:00:00 GMT
boolean after(Date) y boolean before(Date) → indica si la
fecha es posterior o anterior a la fecha especificada
long getTime() y void setTime(long) → obtiene o
establece los ms transcurridos desde el 1/1/1970, 00:00:00
GMT
27
Clases Calendar y
GregorianCalendar
„
„
„
Clase abstract que dispone de métodos para
convertir objetos de la clase Date en enteros que
representan fechas y horas
La clase GregorianCalendar deriva de Calendar y
es la que se utilizará
Representación de fechas y horas:
„
„
„
„
„
Horas: enteros de 0 a 23
Minutos y segundos: enteros entre 0 y 59
Días del mes: enteros entre 1 y 31
Meses del año: enteros de 0 a 11
Años: enteros de 4 dígitos (si se utilizan dos dígitos, se resta
1900)
28
Variables miembro y
constantes de Calendar
„
„
„
„
„
„
„
int AM_PM → puede tomar 2 valores: las constantes AM y PM
int DAY_OF_WEEK → puede tomar los valores int: SUNDAY,
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY y
SATURDAY
int MONTH → puede tomar los valores int: JANUARY,
FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST,
SEPTEMBER, OCTOBER, NOVEMBER y DECEMBER
int HOUR → indica la hora en relojes de 12 horas
int HOUR_OF_DAY → indica la hora en relojes de 24 horas
Los enteros ERA, YEAR, MINUTE, SECOND, MILLISECOND
tienen un significado evidente
int ZONE_OFFSET y int DST_OFFSET indican la zona horaria
y el desfase de segundos respecto a la zona GMT
29
Métodos de la clase Calendar
„
„
„
La clase Calendar dispone de un gran número de
métodos para establecer los valores de la fecha y la
hora
int get(int field) → obtiene el valor del campo
especificado
void set(...) → establece el valor de los campos
especificados
„
„
„
„
void set(int
void set(int
void set(int
void set(int
int second)
field, int value)
year, int month, int date)
year, int month, int date, int hour, int minute)
year, int month, int date, int hour, int minute,
30
Clase GregorianCalendar
„
Deriva de la clase Calendar
„
„
Añade las constantes BC (Before Christ) y AD (Anno
Domini) para la ERA
Constructores
„
„
„
„
GregorianCalendar() → crea un objeto usando la fecha y
hora actual en la zona de tiempo por defecto
GregorianCalendar(int year, int month, int date) → crea
un objeto usando la fecha especificada
GregorianCalendar(int year, int month, int date, int hour,
int minute) → crea un objeto usando la fecha y hora
especificada
GregorianCalendar(int year, int month, int date, int hour,
int minute, int second) → crea un objeto usando la fecha y
hora especificada
31
Ejemplo
Date trialTime = new Date();
GregorianCalendar gc = new GregorianCalendar();
gc.setTime(trialTime);
System.out.println("ERA: " + gc.get(Calendar.ERA));
System.out.println("YEAR: " + gc.get(Calendar.YEAR));
System.out.println("MONTH: " + gc.get(Calendar.MONTH));
System.out.println("WEEK_OF_YEAR: "+
gc.get(Calendar.WEEK_OF_YEAR));
System.out.println("WEEK_OF_MONTH: "+
gc.get(Calendar.WEEK_OF_MONTH));
System.out.println("DATE: " + gc.get(Calendar.DATE));
System.out.println("DAY_OF_MONTH: " +
gc.get(Calendar.DAY_OF_MONTH));
32
Clases DateFormat y
SimpleDateFormat
„
DateFormat:
„
„
„
„
Clase abstract del package java.text (no
pertenece a java.util, como las anteriores)
Permite dar formato a fechas y horas
Dispone de métodos static para convertir Strings
representando fechas y horas en objetos de la
clase Date, y viceversa
SimpleDateFormat:
„
„
Clase derivada de DateFormat
Constructor: SimpleDateFormat(String pattern)
„
El String indica el formato a utilizar
33
Ejemplo
public static void main(String arg[]) throws ParseException
{
SimpleDateFormat sdf1 =
new SimpleDateFormat("dd-MM-yyyy hh:mm:ss");
SimpleDateFormat sdf2 = new SimpleDateFormat("dd-MM-yy");
Date d = sdf1.parse("12-04-1968 11:23:45");
String s = sdf2.format(d);
System.out.println(s);
}
34
Clases TimeZone y
SimpleTimeZone
„
TimeZone:
„
„
„
„
Clase abstract que sirve para definir la zona
horaria
Pertenece al package java.util
public static TimeZone getDefault() → devuelve
la zona horaria del ordenador en el que se ejecuta
el programa
SimpleTimeZone:
„
„
Deriva de TimeZone
Es la que se utiliza
35
Descargar