Colecciones y Archivos
Colecciones
Java proporciona la interfaz colletion la cual
trabaja con un conjunto de elementos que se relacionan entre sí , es
decir, toma dicho conjunto y nos ayuda a almacenar y recuperar
de una manera más sencilla. Java incluye además el paquete java.util
con un diverso conjunto de clases (clases contenedoras) para el manejo de
colecciones el cual podemos implementar para realizar operaciones básicas sobre
una colección como ,agregar, eliminar , recorrer la colección, entre otros, que
nos es de utilidad para la organización del mismo
Las operaciones básicas de una colecciones entonces son:
- add(T): Añade un elemento.
- iterator(): Obtiene un “iterador” que
permite recorrer la colección visitando cada elemento una vez.
- size(): Obtiene la cantidad de
elementos que esta colección almacena.
- contains(t): Pregunta si el
elemento t ya está dentro de la colección.
Se puede trabajar en elementos en particular o sobre la colección completa
TIPOS DE COLECCIONES
Java cuenta con una variedad de colecciones entre las principales tenemos:
LIST: Son colecciones que llevan un
orden arbitrario de los elementos, son manejados por un indice y además admite
elementos duplicado. Existe en java dos implementaciones de list:
-
Arraylist: este nos permite expandir progresivamente la colección a medida
que se le añaden elementos (lo contrario a un array común) .Se tiene como
ventaja que puede acceder de manera aleatoria a los elementos de la
colección y como desventaja que si queremos eliminar un elemento al
principio de la lista, o del medio, la clase debe mover todos los que le
siguen a la posición anterior, para ocultar el espacio que deja el
elemento removido. Esto hace que extraer elementos del medio o del
principio sea costoso por ello no es recomendable utilizarlo si solo se
dedicara a agregar y borrar elementos.
Para crear un array list:
Arraylist <tipo_objeto> variable = new Arraylist< tipo_objeto
>


- LinkedList: Esta implementación se
basa en una lista doblemente enlazada de los elementos, teniendo cada uno
de los elementos un puntero al anterior y al siguiente elemento.
En ésta, los elementos son mantenidos en una serie entrelazos entre sí. Cada uno apunta a su antecesor y al elemento que le sigue. Nada más. No hay nada en cada uno de esos “eslabones” que tenga algo que ver con la posición en la lista. Es decir que si queremos buscar un elemento “x” esta implementación empieza desde el comienzo y va avanzando n cantidad de veces buscando el elemento, la ventaja es que es posible eliminar elementos del principio de la lista y del medio de manera muy eficiente. Para eliminar un elemento solamente hay que modificar a sus elementos adyacentes para que se “conecten” entre sí ignorando al elemento que se está borrando como si retiráramos un eslabón de una cadena.
NOTA: Solo debe recorrerse mediante iteradores
SET: Esta colección es usada principalmente cuando no se desea tener elementos duplicados, por ejemplo cuando se trabaja con cuentas de banco o números de teléfono. Funciona de la misma manera que una interfaz colletion con la única restricción de que no pueden existir elementos duplicados
Dentro de la colección set se tienen distintas implementaciones:- HashSet: posee un buen rendimiento
con la única excepción que no garantiza ningún orden a la hora de realizar
iteraciones pero esto normalmente no es de importancia para la mayoría de
los casos, al contrario es importante definir el tamaño inicial de la
tabla hash ya que este tamaño marcará el rendimiento de esta
implementación.
- TreeSet: dicha implementación
almacena los elementos ordenándolos en función de sus valores.
- LinkedHashSet: almacena los elementos
de acuerdo al orden en que se ingresan.
MAP: La interfaz Map es un objeto que asocia claves a valores. No puede contener claves duplicadas y cada una de dichas claves, tendrá como máximo un valor determinado.
Dentro de la interfaz map:- HashMap: Al igual que hashset ,
esta implementación almacena las claves en una tabla hash. No garantiza
ningún orden a la hora de realizar iteraciones (orden de las claves) .Las
operaciones básicas (get y put) se harán en tiempo constante siempre que
se dispersen adecuadamente los elementos.
Ejemplo:- LinkedList: Esta implementación se
basa en una lista doblemente enlazada de los elementos, teniendo cada uno
de los elementos un puntero al anterior y al siguiente elemento.
AgendaTreeMap.java
import
java.util.*;
public
class AgendaTreeMap
{
public
static void main(String args[])
{
// Definir
un TreeMap
TreeMap
agenda = new TreeMap();
// Agregar pares "clave"-"valor" al HashMap
agenda.put("Doctor",
"(+52)-4000-5000");
agenda.put("Casa",
"(888)-4500-3400");
agenda.put("Hermano",
"(575)-2042-3233");
agenda.put("Tio",
"(421)-1010-0020");
// Notese que el orden del TreeMap refleja un orden ascendente
// en sus elementos independientemente del orden de insercion.
// Debido al uso de String se refleja un orden alfabetico
mostrarMapa(agenda);
// Definir dos TreeMap nuevos
SortedMap
agendaAO = agenda.subMap("A", "O");
SortedMap
agendaPZ = agenda.tailMap("P");
System.out.println("---- Agenda A-O ----");
mostrarMapa(agendaAO);
System.out.println("----
Agenda P-Z ----");
mostrarMapa(agendaPZ);
}
public
static void mostrarMapa(Map agenda) {
System.out.println("
Agenda con " + agenda.size() +
"
telefonos");
for(
Iterator it = agenda.keySet().iterator(); it.hasNext();) {
String
clave = (String)it.next();
String
valor = (String)agenda.get(clave);
System.out.println(clave + " : " + valor);
}
}
|
ITERADORES
Un iterador nos permite acceder secuencialmente a todos los elementos de una colección uno por uno.En java es utilizado como una interface llamada iterador
Se utilizan de diferentes maneras según su método:
boolean hasNext(): retorna true en caso de haber más elementos y false en caso de llegar al final de iterator
Object next(): retorna el siguiente elemento en la iteración
void remove(): remueve el ultimo elemento devulto por la iteración
Ejemplo:
Vector, ArrayList, HashSet y TreeSet
List
invitados= new ArrayList();
invitados.add(“Juan”);
invitados.add(“Pepe”);
Iterator it
= lasPersonas.iterator();
While(it.hasNext){
String
unInvitado = (String) it.next();
}
En las clases HashMap y TreeMap se utiliza de la siguiente manera:
SortedMap
sm=new TreeMap();
sm.put(3,
"Intruccion");
sm.put(2,
5);
Iterator
iterator = sm.entrySet().iterator();
while
(iterator.hasNext()) {
Object
claveValor = iterator.next();
System.out.println("Clave = Valor : "+claveValor;
}
|
Manejo de Archivos
El manejo de archivos (persistencia) es la interacción con dispositivos de almacenamiento externo es decir es una manera diferente de almacenar información ya que normalmente toda la información se encuentra en nuestro programa y paquetes por lo tanto si este es eliminado por defecto su información también. Con el manejo de archivos tenemos la salvedad de que no se perderá la información que almacenemos .
Las clases que usaremos para el manejo de archivos están ubicadas en el paquete java.io por lo tanto debemos importarlas
Clases de Archivos
- File:
- FileWriter:en esta clase podemos
escrirbir datos de tipo caracter en un archivo. Su método write() le
permite escribir caracteres de una cadena en un archivo.
- BufferedWriter:
- PrintWriter:
Para crear un archivo nuevo en Java utilizaremos la clase File
Esta clase nos permite obtener informacion sobre archivos y directorios almacenados en el disco duro local ademas de poder crear y eliminar archivos y directorios . Los objetos(el archivo o directorio) de esta clase file no se pueden modificar solo es posible asignarle una instancia diferente de la clase File
Constructores de la clase file
public File(String nombreFichero|path);
public File(String path, String nombreFichero|path);
public File(File path, String nombreFichero|path);
public File(String path, String nombreFichero|path);
public File(File path, String nombreFichero|path);
Ejemplo
import
java.io.File;
import
java.io.IOException;
public
class File2 {
public
static void main(String[] args) throws IOException {
File ruta =
new File("c:/ficheros");
File f =
new File(ruta, "datos.txt");
System.out.println(f.getAbsolutePath());
System.out.println(f.getParent());
System.out.println(ruta.getAbsolutePath());
System.out.println(ruta.getParent());
if (!f.exists()) { //se comprueba si el fichero existe o no
System.out.println("Fichero
" + f.getName() + " no existe");
if (!ruta.exists()) { //se comprueba si la ruta existe o no
System.out.println("El directorio " + ruta.getName() +
" no existe");
if (ruta.mkdir()) { //se crea la ruta. Si se ha creado correctamente
System.out.println("Directorio creado");
if (f.createNewFile()) { //se crea el fichero. Si se ha creado
correctamente
System.out.println("Fichero " + f.getName() + "
creado");
} else {
System.out.println("No se ha podido crear " + f.getName());
}
} else {
System.out.println("No se ha podido crear " +
ruta.getName());
}
} else { //si la ruta existe creamos el fichero
if
(f.createNewFile()) {
System.out.println("Fichero
" + f.getName() + " creado");
} else {
System.out.println("No se ha podido crear " + f.getName());
}
}
} else { //el fichero existe. Mostramos el tamaño
System.out.println("Fichero
" + f.getName() + " existe");
System.out.println("Tamaño
" + f.length() + " bytes");
}
}
}
|
Métodos de la clase file
MÉTODO
|
DESCRIPCIÓN
|
boolean canRead()
|
Devuelve true si se puede leer el fichero
|
boolean canWrite()
|
Devuelve true si se puede escribir en el fichero
|
boolean createNewFile()
|
Crea el fichero asociado al objeto File. Devuelve true si se ha podido crear. Para poder crearlo el fichero no debe existir. Lanza una excepción del tipo IOException.
|
boolean delete()
|
Elimina el fichero o directorio. Si es un directorio debe estar vacío. Devuelve true si se ha podido eliminar.
|
boolean exists()
|
Devuelve true si el fichero o directorio existe
|
String getName()
|
Devuelve el nombre del fichero o directorio
|
String getAbsolutePath()
|
Devuelve la ruta absoluta asociada al objeto File.
|
String getCanonicalPath()
|
Devuelve la ruta única absoluta asociada al objeto File. Puede haber varias rutas absolutas asociadas a un File pero solo una única ruta canónica. Lanza una excepción del tipo IOException.
|
String getPath()
|
Devuelve la ruta con la que se creó el objeto File. Puede ser relativa o no.
|
String getParent()
|
Devuelve un String conteniendo el directorio padre del File. Devuelve null si no tiene directorio padre.
|
File getParentFile()
|
Devuelve un objeto File conteniendo el directorio padre del File. Devuelve null si no tiene directorio padre.
|
boolean isAbsolute()
|
Devuelve true si es una ruta absoluta
|
boolean isDirectory()
|
Devuelve true si es un directorio válido
|
boolean isFile()
|
Devuelve true si es un fichero válido
|
long lastModified()
|
Devuelve un valor en milisegundos que representa la última vez que se ha modificado (medido desde las 00:00:00 GMT, del 1 de Enero de 1970). Devuelve 0 si el fichero no existe o ha ocurrido un error.
|
long length()
|
Devuelve el tamaño en bytes del fichero. Devuelve 0 si no existe. Devuelve un valor indeterminado si es un directorio.
|
String[] list()
|
Devuelve un array de String con el nombre de los archivos y directorios que contiene el directorio indicado en el objeto File. Si no es un directorio devuelve null. Si el directorio está vacío devuelve un array vacío.
|
String[] list(FilenameFilter filtro)
|
Similar al anterior. Devuelve un array de String con el nombre de los archivos y directorios que contiene el directorio indicado en el objeto File que cumplen con el filtro indicado.
|
boolean mkdir()
|
Crea el directorio. Devuelve true si se ha podido crear.
|
boolean mkdirs()
|
Crea el directorio incluyendo los directorios no existentes especificados en la ruta padre del directorio a crear. Devuelve true si se ha creado el directorio y los directorios no existentes de la ruta padre.
|
boolean renameTo(File dest)
|
Cambia el nombre del fichero por el indicado en el parámetro dest. Devuelve true si se ha realizado el cambio.
|
Comentarios
Publicar un comentario