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();
}
}