Conviértete en un emprendedor,profesional del conocimiento en la programación

martes, 10 de enero de 2012

Clase LinkedList

Compartir con:


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