Download Tema 4. Clases de utilidad - ISA-UMH
Document related concepts
no text concepts found
Transcript
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