import java.util.Arrays;
public class MyList<E> implements MyListInterface<E> {
// The list data structure private E[] theData; // has an array to store elements private int size; // the number of elements it currently holds private int capacity; // the maximum elements it can hold // Constructors public MyList() { capacity = 1; size = 0; theData = (E[]) new Object[capacity]; } public MyList(int cap) { capacity = cap; size = 0; theData = (E[]) new Object[capacity]; }
// Operations from MyListInterface public void clear() { // Set it to an empty list size = 0; }
public int size() { // Returns the size of the list return size; } public boolean isEmpty() { // Returns true is list if empty, false o/w return (size == 0); } public boolean add(E item) { // Inserts item at end of list. Returns true if successful, false o/w if (size == capacity) { reallocate(); } theData[size] = item; size++; return true; } public boolean add(int index, E item) { // Insert item at idex-th position in list. Returns true if successful, false o/w if (index < 0 || index > size) { throw new ArrayIndexOutOfBoundsException(index); } if (size == capacity) { reallocate(); } // shift items back by one to make room at index for item for (int i=size; i > index; i--) { theData[i] = theData[i-1]; } theData[index] = item; size++; return true; } public E set(int index, E item) { // Sets the index-th element to item, Returns the old item at index if (index < 0 || index > size-1) { throw new ArrayIndexOutOfBoundsException(index); } E oldItem = theData[index]; theData[index] = item; return oldItem; } public E get(int index) { // Returns the item at index-th location in list if (index < 0 || index > size-1) { throw new ArrayIndexOutOfBoundsException(index); } return theData[index]; } public E remove(int index) { // Removes the index-th element from list, and returns it if (index < 0 || index > size-1) { throw new ArrayIndexOutOfBoundsException(index); } E item = theData[index]; for (int i=index+1; i < size; i++) { theData[i-1] = theData[i]; } size--; return item; } public boolean contains(E item) { // Returns true if list conatins item, false o/w for (int i=0; i < size; i++) { if (theData[i].equals(item)) { return true; } } return false; } private void reallocate() { E[] oldData = theData; capacity *= 2; theData = (E[]) new Object[capacity]; // copy all elements from oldData to theData for (int i=0; i < size; i++) { theData[i] = oldData[i]; } //Below is an alternative/better way that uses Java's built-in copy // function for arrays... //theData = Arrays.copyOf(theData, capacity); } } // class MyList