LISTAS DOBLES
Clase LinkedList
LinkedList, al igual que ArrayList
es una implementación de la interface List. Esta clase provee
métodos para obtener (get), remover (remove) e insertar elementos al principio (addFirst),
al final(addLast), después de algún nodo (addAfter), antes de algún
nodo(addBefore). Estas operaciones permiten a las listas doblemente enlazadas
sean utilizadas como pila, cola o como listas generales.
Métodos más frecuentes:
addFirst(<objeto-info>):
agrega un nuevo nodo con el objeto info al inicio de la lista.
addLast (<objeto-info>):
agrega un nuevo nodo con el objeto info al final de la lista.
add(<posicion>, objeto):
agrega un nuevo nodo en la posición entera indicada
removeFirst (): elimina el nodo del
inicio de la lista.
removeLast(): elimina el nodo del
final de la lista.
remove(<posición>):
elimina el nodo de la posición indicada
remove(<objeto-info>):
elimina el nodo que contiene al objeto indicado
size(): retorna la cantidad de
nodos de la lista.
clear(): elimina todos los
nodos de la lista.
indexOf(<clave>): retorna
el número de nodo correspondiente a la clave indicada.
Ejercicio 1
Considere la clase Empleado con los siguientes atributos:
código(cadena), nombre(cadena), sueldo(real).
Diseñe la clase ListaDobleEmpleados con los siguientes
atributos: un objeto lista de tipo LinkedList. También considere los
siguientes métodos de administración: agregaAlInicio, agregaAlFinal(),
elimina(), busca(), getN().
Diseñe la clase PanelEmpleados con el siguiente atributo:
un objeto lde de tipo ListaDobleEmpleados y con la siguiente
interface gráfica:
Diseñe la clase ListaDobleEmpleadosA que herede a la clase
ListaDobleEmpleados y considere los métodos necesarios para guardar la
información en un archivo de texto.
Tambien programe los botones Agrega Despues De, Agrega Antes De.
Haga la clase Principal (Frame) y ejecute su aplicación.
Solución:
package LinkedList;
public class Empleado {
private String Codigo, Nombre;
private double Sueldo;
public Empleado() { }
public Empleado (String Codigo,String
Nombre,double Sueldo){
this.Codigo = Codigo;
this.Nombre
= Nombre;
this.Sueldo =
Sueldo;
}
public String getCodigo() {
return Codigo;
}
public void setCodigo(String Codigo) {
this.Codigo = Codigo;
}
public String getNombre() {
return Nombre;
}
public void setNombre(String Nombre) {
this.Nombre = Nombre;
}
public double getSueldo() {
return Sueldo;
}
public void setSueldo(double Sueldo) {
this.Sueldo
= Sueldo;
}
} // Fin de la clase Empleado
package LimkedList;
import java.util.LinkedList;
import javax.swing.JTextArea;
public class ListaDobleEmpleados
{
private LinkedList<Empleado> lista;
public ListaDobleEmpleados(){
lista= new LinkedList<Empleado>();
}
//Metodos basicos
public LinkedList<Empleado> getLista(){
return lista;
}
public int getN(){
return getLista().size();
}
public void agregaAlInicio(Empleado e){
getLista().addFirst(e);
}
public void agregaAlFinal(Empleado e){
getLista().addLast(e);
}
public void elimina(String codigo){
Empleado
e=busca(codigo);
getLista().remove(e);
}
public Empleado
busca(String codigo){
for(Empleado
e:getLista()){
if(codigo.equals(e.getCodigo()))
return e;
}
return null;
}
public void lista(JTextArea salida){
salida.setText("Codigo\tNombre\tSueldo\n");
for(Empleado e:getLista()){
salida.append(e.getCodigo()+"\t"+e.getNombre()+"\t"+e.getSueldo()+"\n");
}
}
public void
listaI(JTextArea salida){
salida.setText("Codigo\tNombre\tSueldo\n");
for(int
i=getN()-1;i>=0;i--){
Empleado e=getLista().get(i);
salida.append(e.getCodigo()+"\t"+e.getNombre()+"\t"+e.getSueldo()+"\n");
}
}
public int buscaPosicion(String codigo){
int c=0;
for(Empleado e:getLista()){
if(codigo.equals(e.getCodigo()))
return
c;
c++;
}
return -1;//no
existe o no encontrado.
}
public void
agregaAntesD(int i, Empleado e){
getLista().add(i-1,
e);
}
public void
agregaAntesD(String codigo, Empleado e){
int i=(buscaPosicion(codigo));
getLista().add(i,
e);
}
public void
agregaDespuesD(int i,Empleado e){
getLista().add(i,
e);
}
public void
agregaDespuesD(String codigo,Empleado e){
getLista().add((buscaPosicion(codigo))+1, e);
}
} // Fin de la Clase
ListaDobleEmpleado
package LinkedList;
import java.io.*;
import
java.util.StringTokenizer;
public class ListaDobleEmpleadosA extends ListaDobleEmpleados{
private String nombre;
public
ListaDobleEmpleadosA(String nombre){
super();
this.nombre=nombre;
lee();
}
public void graba(){
try {
FileWriter fw=new
FileWriter(nombre);
PrintWriter pw=new PrintWriter(fw);
for(Empleado
e:getLista()){
pw.println(e.getCodigo()+"--"+e.getNombre()+"--"+e.getSueldo());
}
pw.close();
} catch (Exception e) {
}
}
public void lee(){
try {
FileReader fr=new
FileReader(nombre);
BufferedReader br=new
BufferedReader(fr);
String linea=br.readLine();
while(linea!=null){
StringTokenizer st=new StringTokenizer(linea,
"--");
String codigo=st.nextToken();
String nombres=st.nextToken();
double
sueldo=Double.parseDouble(st.nextToken());
agregaAlFinal(new
Empleado(codigo, nombres, sueldo));
linea=br.readLine();
}
br.close();
}
catch (Exception e) {
}
}
} // Fin de la Clase
ListaDobleEmpleadosA
PanelEmpleados
Programando la acción de los botones,
y creando un objeto tipo ListaDobleEmpleadosA
ldeA para llamar a los métodos, y guardar archivos.
private ListaDobleEmpleadosA ldeA;
public PanelEmpleado() {
initComponents();
ldeA=new
ListaDobleEmpleadosA("Empleado.txt");
}
private void
AgregaIActionPerformed(java.awt.event.ActionEvent evt) {
if(ldeA.busca(txtCodigo.getText())!=null)
JOptionPane.showMessageDialog(this, "Este
codigo ya existe.\nIntente nuevamente.");
else{
ldeA.agregaAlInicio(new
Empleado(txtCodigo.getText(), txtNombre.getText(), Double.parseDouble(txtSueldo.getText()))); }
ldeA.graba();
limpia();
}
public void limpia(){
txtCodigo.setText("");
txtNombre.setText("");
txtSueldo.setText("");
txtCodigo.requestFocus();}
private void BuscaActionPerformed(java.awt.event.ActionEvent evt)
{
Empleado
e=ldeA.busca(txtCodigo.getText());
if(e==null )JOptionPane.showMessageDialog(this, "Codigo no
existe");
else{
txtNombre.setText(e.getNombre());
txtSueldo.setText(e.getSueldo()+"");
}
}
private void
EliminaActionPerformed(java.awt.event.ActionEvent evt) {
if(ldeA.busca(txtCodigo.getText())==null)
JOptionPane.showMessageDialog(this,
"Existe ya este codigo.\nIngrese otro codigo.");
else{
ldeA.elimina(txtCodigo.getText());
}
}
private void
ListaActionPerformed(java.awt.event.ActionEvent evt) {
ldeA.lista(txtSalida);
}
private void
ListaIActionPerformed(java.awt.event.ActionEvent evt) {
ldeA.listaI(txtSalida);
}
private void
AgregaFActionPerformed(java.awt.event.ActionEvent evt) {
if(ldeA.busca(txtCodigo.getText())!=null)
JOptionPane.showMessageDialog(this,
"Existe ya este codigo.\nIngrese otro codigo.");
else{
ldeA.agregaAlFinal(new
Empleado(txtCodigo.getText(), txtNombre.getText(), Double.parseDouble(txtSueldo.getText())));
}
ldeA.graba();
limpia();
}
private void
AgregaAActionPerformed(java.awt.event.ActionEvent evt) {
String
a=JOptionPane.showInputDialog(this, "Ingrese codigo");
if(ldeA.busca(a)!=null){
if(ldeA.busca(txtCodigo.getText())!=null) JOptionPane.showMessageDialog(this, "El
codigo de nuevo empleado ya existe.\nIntente nuevamente.");
else{
ldeA.agregaAntesD( a,new
Empleado(txtCodigo.getText(), txtNombre.getText(),
Double.parseDouble(txtSueldo.getText())));
}
}
else JOptionPane.showMessageDialog(this,
"Codigo ingresado no existe.\nIntente nuevamente.");
ldeA.graba();
limpia();
}
private void
AgregaDActionPerformed(java.awt.event.ActionEvent evt) {
String
a=JOptionPane.showInputDialog(this, "Ingrese codigo");
if(ldeA.busca(a)!=null){
if(ldeA.busca(txtCodigo.getText())!=null) JOptionPane.showMessageDialog(this, "El
codigo de nuevo empleado ya existe.\nIntente nuevamente.");
else{
ldeA.agregaDespuesD( a,new
Empleado(txtCodigo.getText(), txtNombre.getText(),
Double.parseDouble(txtSueldo.getText())));
}
}
else JOptionPane.showMessageDialog(this,
"Codigo ingresado no existe.\nIntente nuevamente.");
ldeA.graba();
limpia();
}
private javax.swing.JButton
AgregaA;
private javax.swing.JButton
AgregaD;
private javax.swing.JButton
AgregaF;
private javax.swing.JButton
AgregaI;
private javax.swing.JButton
Busca;
private javax.swing.JButton
Elimina;
private javax.swing.JButton
Lista;
private javax.swing.JButton
ListaI;
private javax.swing.JLabel
jLabel1;
private javax.swing.JLabel
jLabel2;
private javax.swing.JLabel
jLabel3;
private javax.swing.JPanel
jPanel1;
private javax.swing.JPanel
jPanel2;
private
javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextField
txtCodigo;
private javax.swing.JTextField
txtNombre;
private javax.swing.JTextArea
txtSalida;
private javax.swing.JTextField
txtSueldo;
} // Fin de la programcion en el PanelEmpelado
Diseño de la clase Principal (Frame)
Programando en el Frame para ejecutar
el programa.
package LinkedList;
public class Principal extends javax.swing.JFrame {
public Principal() {
initComponents();
add(new PanelEmpleado());
pack();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new
Principal().setVisible(true);
}
});
}
} // Ejecute el programa
0 comentarios:
Publicar un comentario