public class AList < T > implements ListInterface < T >, java.io.Serializable { private T [] list; // array of list entries private int length; // current number of entries in list private static final int MAX_SIZE = 50; // max length of list public AList () { this (MAX_SIZE); // call next constructor } // end default constructor public AList (int maxSize) { length = 0; list = (T []) new Object [maxSize]; // necessary cast to generic type } // end constructor public boolean add (T newEntry) { if(isFull()) { return false; } int i = 0; while(list[i] != null && i < list.length) { i++; } list[i] = newEntry; length++; return true; } // end add public boolean add (int newPosition, T newEntry) { if(isFull() || newPosition < 1 || newPosition > getLength())//list.length) { return false; } makeRoom(newPosition); list[newPosition-1] = newEntry; length++; return true; } // end add public T remove (int givenPosition) { T result = null; // return value if(isEmpty() || givenPosition < 1 || givenPosition > getLength()) { return null; } result = list[givenPosition-1]; removeGap(givenPosition); length--; return result; // return reference to removed entry, or // null if either list is empty or givenPosition // is invalid } // end remove public void clear () { length = 0; } // end clear public boolean replace (int givenPosition, T newEntry) { if(isEmpty() || givenPosition < 1 || givenPosition > getLength()) { return false; } list[givenPosition-1] = newEntry; return true; } // end replace public T getEntry (int givenPosition) { if(isEmpty() || givenPosition < 1 || givenPosition > getLength()) { return null; } return list[givenPosition-1]; } // end getEntry public boolean contains (T anEntry) { for(int i = 0; i < getLength()-1; i++) { if(list[i].equals(anEntry)) return true; } return false; } // end contains public int getLength () { return length; } // end getLength public boolean isEmpty () { if(length == 0) { return true; } return false; } // end isEmpty public boolean isFull () { if(list.length == getLength())//list[list.length-1] != null) { return true; } return false; } // end isFull public void display () { for (int index = 0 ; index < length ; index++) System.out.println (list [index]); } // end display public void reverse () { T[] temp = (T []) new Object [list.length]; for(int i = 1; i < list.length; i++) { temp[i] = list[list.length-i]; } list = temp; } /** Task: Makes room for a new entry at newPosition. *Precondition:1<=newPosition <= length+1; *lengthislistslength before addition. */ private void makeRoom (int newPosition) { assert (newPosition >= 1) && (newPosition <= length + 1); int newIndex = newPosition - 1; int lastIndex = length - 1; // move each entry to next higher index, starting at end of // list and continuing until the entry at newIndex is moved for (int index = lastIndex ; index >= newIndex ; index--) list [index + 1] = list [index]; } // end makeRoom /** Task: Shifts entries that are beyond the entry to be removed *tothenextlower position. *Precondition:1<=givenPosition < length; *lengthislistslength before removal. */ private void removeGap (int givenPosition) { assert (givenPosition >= 1) && (givenPosition < length); int removedIndex = givenPosition - 1; int lastIndex = length - 1; for (int index = removedIndex ; index < lastIndex ; index++) list [index] = list [index + 1]; } // end removeGap } // end AList