Código para Bicolas genéricas usando Vectores (con ficheros):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
/** * Proyecto: 9x04-Bicola - Vector y Ficheros * Fichero: Bicola.java * Fecha: 24/05/2012 * * Licencia (CC) BY-NC-SA: giltesa.com * * http://docs.oracle.com/javase/7/docs/api/java/util/Vector.html * http://mundogeek.net/archivos/2009/03/11/generics-en-java/ */ import java.util.Vector; /*import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable;*/ import java.io.*; public class Bicola<G> implements Serializable { // PROPIEDADES: private Vector<Nodo<G>> vNodos; private static final long serialVersionUID = 3717013638745390665L; // CONSTRUCTOR: // Se instancia un Vector de Nodos Genericos. (Del tipo con el que instanciamos la Bicola). public Bicola() { vNodos = new Vector<Nodo<G>>(5, 2); } // METODOS: // Se devuelve el numero de elementos usados en el Vector. public int getNumDeNodos() { return vNodos.size(); } // Se añade un Nodo a la izquierda y se desplazan los demas una posicion a la derecha en el indice. public void addNodoIzquierda( G dato ) { vNodos.add(0, new Nodo<G>(dato)); } // Se añade al final del Vector un nuevo Nodo: public void addNodoDerecha( G dato ) { vNodos.addElement(new Nodo<G>(dato)); } // Se copia el primer elemento en temp, despues se elimina del Vector. public G getNodoIzquierda() { G temp = vNodos.firstElement().getDatoNodo(); vNodos.removeElementAt(0); return temp; } // Se copia el ultimo elemento en temp, despues se elimina del Vector. public G getNodoDerecha() { G temp = vNodos.lastElement().getDatoNodo(); vNodos.removeElementAt(vNodos.size() - 1); return temp; } // Se concatenan todos los elementos del Vector en cadena y luego se devuelve. public String toString() { String cadena = ""; for( int i = 0; i < vNodos.size(); i++ ) cadena += vNodos.get(i).getDatoNodo() + ", "; return cadena; } // Lee un objecto Bicola desde el fichero backup y se devuelve por "valor". public Bicola<G> readBicolaFichero() { FileInputStream fichEntrada = null; ObjectInputStream objEntrada = null; Bicola<G> temp = null; try { fichEntrada = new FileInputStream("backup.dat"); objEntrada = new ObjectInputStream(fichEntrada); temp = (Bicola<G>) objEntrada.readObject(); } catch( FileNotFoundException e ) { System.out.println("El sistema no puede encontrar el archivo especificado"); } catch( ClassNotFoundException e ) { System.out.println("El contenido leido en \"backup.dat\" no era el esperado."); } catch( Exception e ) { System.out.println(e); } finally { // Como ultimo paso se cierran los ficheros. try { if( objEntrada != null ) objEntrada.close(); if( fichEntrada != null ) fichEntrada.close(); } catch( Exception e ) { System.out.println(e); } } return temp; } // Recibe por referencia un objeto Bicola que es guardado en el fichero backup. public void writeBicolaFichero( Bicola<G> bicola ) { FileOutputStream fichSalida = null; ObjectOutputStream objSalida = null; try { fichSalida = new FileOutputStream("backup.dat"); objSalida = new ObjectOutputStream(fichSalida); objSalida.writeObject(bicola); } catch( FileNotFoundException e ) { System.out.println("El sistema no puede encontrar el archivo especificado"); } catch( Exception e ) { System.out.println(e); } finally { // Como ultimo paso se cierran los ficheros. try { if( objSalida != null ) objSalida.close(); if( fichSalida != null ) fichSalida.close(); } catch( Exception e ) { System.out.println("No se pudo cerrar el fichero."); } } } } |
Código para Bicolas genéricas usando Referencias (con ficheros):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 |
/** * Proyecto: 9x03-Bicola - Referencias y Ficheros * Fichero: Bicola.java * Fecha: 24/05/2012 * * Licencia (CC) BY-NC-SA: giltesa.com * * http://josedeveloper.com/2012/02/24/sabias-que-el-serialversionuid-en-las-clases-java-nos-previene-de-errores-en-la-deserializacion/ */ import java.io.FileNotFoundException; import java.io.ObjectInputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class Bicola<G> implements Serializable { // PROPIEDADES: private int numDeNodos; private Nodo<G> primerNodo; private Nodo<G> ultimoNodo; private static final long serialVersionUID = -3054441480627810268L; // "Identificador de la clase" // METODOS: public int getNumDeNodos() { return numDeNodos; } // Añade un nuevo Nodo a la izquierda modificando las referencias de las propiedades. public void addDatoIzquierda( G dato ) { Nodo<G> temp = new Nodo<G>(dato); if( primerNodo == null ) { primerNodo = temp; ultimoNodo = temp; } else { temp.setNodoSiguiente(primerNodo); primerNodo.setNodoAnterior(temp); primerNodo = temp; } numDeNodos++; } // Añade un nuevo Nodo a la derecha modificando las referencias de las propiedades. public void addDatoDerecha( G dato ) { Nodo<G> temp = new Nodo<G>(dato); if( ultimoNodo == null ) { primerNodo = temp; ultimoNodo = temp; } else { temp.setNodoAnterior(ultimoNodo); ultimoNodo.setNodoSiguiente(temp); ultimoNodo = temp; } numDeNodos++; } // Extrae el primer dato y cambia las referenciaas de las propiedades. public G getDatoIzquierda() { G temp = primerNodo.getDatoNodo(); if( primerNodo == ultimoNodo ) // Solo hay un nodo y se acaba de extraer quedando ahora 0. { primerNodo = null; ultimoNodo = null; } else { primerNodo = primerNodo.getNodoSiguiente(); primerNodo.setNodoAnterior(null); } numDeNodos--; return temp; } // Extrae el ultimo dato y cambia las referenciaas de las propiedades. public G getDatoDerecha() { G temp = ultimoNodo.getDatoNodo(); if( primerNodo == ultimoNodo ) { primerNodo = null; ultimoNodo = null; } else { ultimoNodo = ultimoNodo.getNodoAnterior(); ultimoNodo.setNodoSiguiente(null); } numDeNodos--; return temp; } // Concatena todos los elementos de la Bicola por referencias y lo retorna. public String toString() { String cadena = ""; Nodo<G> posicion = primerNodo; while(posicion != null) { cadena += posicion.getDatoNodo() + ", "; posicion = posicion.getNodoSiguiente(); } return cadena; } // Lee un objecto Bicola desde el fichero backup y se devuelve por "valor". public Bicola<G> readBicolaFichero() { FileInputStream fichEntrada = null; ObjectInputStream objEntrada = null; Bicola<G> temp = null; try { fichEntrada = new FileInputStream("backup.dat"); objEntrada = new ObjectInputStream(fichEntrada); temp = (Bicola<G>) objEntrada.readObject(); } catch( FileNotFoundException e ) { System.out.println("El sistema no puede encontrar el archivo especificado"); } catch( ClassNotFoundException e ) { System.out.println("El contenido leido en \"backup.dat\" no era el esperado."); } catch( Exception e ) { System.out.println(e); } finally { // Como ultimo paso se cierran los ficheros. try { if( objEntrada != null ) objEntrada.close(); if( fichEntrada != null ) fichEntrada.close(); } catch( Exception e ) { System.out.println(e); } } return temp; } // Recibe por referencia un objeto Bicola que es guardado en el fichero backup. public void writeBicolaFichero( Bicola<G> bicola ) { FileOutputStream fichSalida = null; ObjectOutputStream objSalida = null; try { fichSalida = new FileOutputStream("backup.dat"); objSalida = new ObjectOutputStream(fichSalida); objSalida.writeObject(bicola); } catch( FileNotFoundException e ) { System.out.println("El sistema no puede encontrar el archivo especificado"); } catch( Exception e ) { System.out.println(e); } finally { try { if( objSalida != null ) objSalida.close(); if( fichSalida != null ) fichSalida.close(); } catch( Exception e ) { System.out.println("No se pudo cerrar el fichero."); } } } } |