import java.util.*;
/**
* Description:
*
* @author Glenn Lancaster
* @version 22 May 07
*/
public class MyList extends AbstractList
{
private E[] arr;
private int cnt;
public MyList()
{
arr = (E[]) new Object[100];
cnt = 0;
}
public int size() {
return cnt;
}
public E get(int i) {
if ( i < 0 || i >= size() ) {
throw new IndexOutOfBoundsException();
}
return arr[i];
}
public E set(int i, E elem) {
if ( i < 0 || i >= size() ) {
throw new IndexOutOfBoundsException();
}
E tmp = arr[i];
arr[i] = elem;
return tmp;
}
public void add(int i, E elem)
{
if ( i < 0 || i > size() ) {
throw new IndexOutOfBoundsException();
}
if ( size() >= arr.length ) {
throw new IllegalStateException();
}
int j = size();
while( j > i ) {
arr[j] = arr[j-1];
j--;
}
arr[i] = elem;
cnt++;
}
public E remove(int i)
{
if ( i < 0 || i >= size() ) {
throw new IndexOutOfBoundsException();
}
E tmp = arr[i];
for(int j = i; j < size(); j++) {
arr[j] = arr[j+1];
}
cnt--;
return tmp;
}
public static void printList(Iterator> p)
{
while(p.hasNext()) {
System.out.println(p.next());
}
}
public static void main(String[] args)
{
MyList lst = new MyList();
MyList lst2 = new MyList();
for(int i = 0; i < 20; i++) {
lst.add(new Integer(100 + i));
lst2.add(new Integer(100 + i));
}
System.out.println("lst.equals(lst2) is " + lst.equals(lst2));
System.out.println("\nPrinting using an iterator");
Iterator p = lst.iterator();
printList(p);
List sub = lst.subList(5, 15);
System.out.println("\nCopying a sublist 5 - 15, include 5, exclude 15");
p = sub.iterator();
printList(p);
System.out.println("lst.size() = " + lst.size());
lst.removeRange(5,15);
System.out.println("\nAfter removing range 5 - 15; include 5, exclude 15");
p = lst.iterator();
printList(p);
System.out.println("lst.size() = " + lst.size());
System.out.println("\nUse a ListIterator to print the list backwards");
ListIterator q = lst.listIterator(lst.size());
while(q.hasPrevious()) {
System.out.println(q.previous());
}
System.out.println("lst.size() = " + lst.size());
System.out.println("\nAfter removing all elements");
lst.clear();
p = lst.iterator();
printList(p);
System.out.println("lst.size() = " + lst.size());
}
}