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

Mostrando entradas con la etiqueta metodos frecuentes. Mostrar todas las entradas
Mostrando entradas con la etiqueta metodos frecuentes. Mostrar todas las entradas

martes, 10 de enero de 2012

Clase LinkedList


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