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