sábado, 24 de agosto de 2013

Lista

Interfaz a Utilizar:
package Lista;

/**
 * @author daniel199410
 */

public interface IList<E>{
    public void add(E target);
    public boolean isEmpty();
    public boolean isfull();
    public boolean contains(E target);
    public void set(int index, E target);
    public E get(int index);
    public E remove(int index);
    public boolean remove(E target);
    public boolean removeAll(E target);
    public void print();
}
La clase Lista:
package Lista;

/**
 * @author daniel199410
 */
public class Lista<E>{
    
    E[] data;
    int size;
    
    public Lista(){
        data=((E[])new Object[1]);
        size=0;
    }
    
    /**
     * Agrega un elemento al final de la lista
     */
    public void add(E target) {
        if(isfull())
            stretch();
        data[size]=target;
        size++;
    }
     
    /**
     * Agrega un elemento en un lugar específico de la lista
     */ 
    public void add(E target, int index){
        if(isfull())
            stretch();
        int j=0;
        E[] temp=((E[]) new Object[data.length]);
        System.arraycopy(data, index, temp, 0, 
                         data.length-index-1);
        for(int i=index+1; i<size; i++){
            data[i]=temp[j];
            j++;
        }
        data[index]=target;
        size++;
    }
     
    public boolean contains(E target) {
        for(int i=0; i<size; i++){
            if(data[i].equals(target))
                return true;
        }
        return false;
    }
     
    public E get(int index) {
        if(index>0 && index<size)
            return data[index];
        return null;
    }
     
    public boolean isEmpty() {
        return size==0;
    }
     
    public boolean isfull() {
        return data.length==size;
    }
    
    /**
     * Imprime toda la lista
     */
    public void print() {
        System.out.print("[");
        for(int i=0; i<size-1; i++){
            if(i!=size-2)
                System.out.print(data[i]+",");
            else
            System.out.print(data[i]);
        }
        System.out.println("]");
    }
    
    /**
     * Remueve el elemento que se encuentre en la posición index
     */
    public E remove(int index) {
        if(index>=0 && index<size){
            E element=data[index];
            for(int i=index; i<size; i++)
                data[i]=data[i+1];
            size--;          
            return element;
        }       
        return null;
    }
    
    /**
     * Remueve el primer elemento que sea igual al target
     */
    public boolean remove(E target) {
        for(int i=size-1; i>=0; i--){        
            if(target.equals(data[i])){
                remove(i);
            }
        }
        return false;
    }
    
    /**
     * Remueve todos los elementos que sean iguales a target
     */
    public boolean removeAll(E target){
        boolean x=true;
        while(x==true){
            x=remove(target);
        }
        return x;
    }
     
    public void set(int index, E target) {
        if(index>=0 && index<size)
            data[index]=target;
    } 
    
    /**
     * Aumenta la capacidad de la lista el doble
     */
    private void stretch(){
        E[] temp=(E[])new Object[data.length*2];
        /**
         * arrayCopy(Object src, int srcPos, Object dest,  
         *          int destPos, int length);
         * src     - El array de origen
         * srcPos  - Posción de inicio en el array de origen
         * dest    - El array de destino
         * destPos - Posición de inicio en el array de destino
         * length  - EL número de elementos del array que va a 
         *           ser copiados
         */
        System.arraycopy(data, 0, temp, 0, data.length);
        data=temp;
    }     
} 
Clase Principal
package Lista;

/**
 * @author daniel199410
 */

public class Main {
    
    public static void main(String[] args) {
        
        Lista l1=new Lista();
        l1.add("100");
        l1.add("200");
        l1.add("300");
        l1.add("400");
        l1.add("500");
        l1.add("600");
        l1.add("700");
        l1.add("800");
        l1.add("900");
        l1.add("100");
        l1.add("200", 4);
        l1.add("300", 4);
        l1.add("400", 4);
        l1.add("500", 4);
        l1.add("600", 4);
        l1.add("700", 4);
        l1.add("800", 4);
        l1.add("900", 4);
        l1.add("100", 4);
        l1.add("200", 4);
        l1.add("300", 4);
        l1.add("400", 4);
        l1.add("500", 4);
        l1.add("600", 4);
        l1.add("700", 4);
        l1.add("800", 4);
        l1.add("900", 4);
        l1.add("100", 4);
        l1.add("200", 4);
        l1.add("300", 4);
        l1.print();
        l1.removeAll("900");
        l1.print();
    }
}

No hay comentarios:

Publicar un comentario