import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import java.util.Set; public class ArrayListImpl { private ArrayList arrayList; /* Constructs an empty list with an initial capacity of ten. */ public ArrayListImpl() { arrayList = new ArrayList(); } /* * Constructs a list containing the elements of the specified collection, in * the order they are returned by the collection's iterator. */ public ArrayListImpl(Collection c) { arrayList = new ArrayList(c); } /* Constructs an empty list with the specified initial capacity. */ public ArrayListImpl(int initialCapacity) { arrayList = new ArrayList(initialCapacity); } /* Appends the specified element to the end of this list. */ public boolean add(E e) { return arrayList.add(e); } /* Inserts the specified element at the specified position in this list. */ public void add(int index, E element) { arrayList.add(index, element); } /* * Appends all of the elements in the specified collection to the end of * this list, in the order that they are returned by the specified * collection's Iterator. */ public boolean addAll(Collection c) { return arrayList.addAll(c); } /* * inserts all of the elements in the specified collection into this list, * starting at the specified position. */ public boolean addAll(int index, Collection c) { return arrayList.addAll(index, c); } /* Removes all of the elements from this list. */ public void clear() { arrayList.clear(); } /* Returns a shallow copy of this ArrayList instance. */ public Object clone() { return arrayList.clone(); } /* Returns true if this list contains the specified element. */ public boolean contains(Object o) { return arrayList.contains(o); } /* * Increases the capacity of this ArrayList instance, if necessary, to * ensure that it can hold at least the number of elements specified by the * minimum capacity argument. */ public void ensureCapacity(int minCapacity) { arrayList.ensureCapacity(minCapacity); } /* Returns the element at the specified position in this list. */ public E get(int index) { return arrayList.get(index); } /* * Returns the index of the first occurrence of the specified element in * this list, or -1 if this list does not contain the element. */ public int indexOf(Object o) { return arrayList.indexOf(o); } /* Returns true if this list contains no elements. */ public boolean isEmpty() { return arrayList.isEmpty(); } /* Returns an iterator over the elements in this list in proper sequence. */ public Iterator iterator() { return arrayList.iterator(); } /* * Returns the index of the last occurrence of the specified element in this * list, or -1 if this list does not contain the element. */ public int lastIndexOf(Object o) { return arrayList.lastIndexOf(o); } /* * Returns a list iterator over the elements in this list (in proper * sequence). */ public ListIterator listIterator() { return arrayList.listIterator(); } /* * Returns a list iterator over the elements in this list (in proper * sequence), starting at the specified position in the list. */ public ListIterator listIterator(int index) { return arrayList.listIterator(index); } /* Removes the element at the specified position in this list. */ public E remove(int index) { return arrayList.remove(index); } /* * Removes the first occurrence of the specified element from this list, if * it is present. */ public boolean remove(Object o) { return arrayList.remove(o); } /* * Removes from this list all of its elements that are contained in the * specified collection. */ public boolean removeAll(Collection c) { return arrayList.removeAll(c); } /* * Retains only the elements in this list that are contained in the * specified collection. */ public boolean retainAll(Collection c) { return arrayList.removeAll(c); } /* * Replaces the element at the specified position in this list with the * specified element. */ public E set(int index, E element) { return arrayList.set(index, element); } /* Returns the number of elements in this list. */ public int size() { return arrayList.size(); } /* * Returns a view of the portion of this list between the specified * fromIndex, inclusive, and toIndex, exclusive. */ public List subList(int fromIndex, int toIndex) { return arrayList.subList(fromIndex, toIndex); } /* * Returns an array containing all of the elements in this list in proper * sequence (from first to last element). */ public Object[] toArray() { return arrayList.toArray(); } /* * Returns an array containing all of the elements in this list in proper * sequence (from first to last element); the runtime type of the returned * array is that of the specified array. */ public T[] toArray(T[] a) { return arrayList.toArray(a); } /* * Trims the capacity of this ArrayList instance to be the list's current * size. */ public void trimToSize() { arrayList.trimToSize(); } public static void main(String... arg) { ArrayListImpl arrayList = new ArrayListImpl(); arrayList.add(10); arrayList.add(20); arrayList.add(30); arrayList.add(3, 40); arrayList.add(-10); Set addAll = new HashSet(); addAll.add(101); addAll.add(200); addAll.add(300); arrayList.addAll(addAll); Set indexAddAll = new HashSet(); indexAddAll.add(101); indexAddAll.add(102); indexAddAll.add(103); arrayList.addAll(5, indexAddAll); if (arrayList.contains(101)) System.out.println("the arrayList contains 101"); else System.out.println("the arrayList does not contain 101"); arrayList.ensureCapacity(15); System.out.println("the arrayList contains " + arrayList.get(5)+ " at index 5"); System.out.println("the index of 101 is " + arrayList.indexOf(101)); System.out.println("the elements of arrayList are"); Iterator itr = arrayList.iterator(); while (itr.hasNext()) { System.out.print(itr.next() + "\t"); } System.out.println(); System.out.println("the last index of 101 is "+ arrayList.lastIndexOf(101)); System.out.println("elements from index 3 are"); ListIterator listIterator = arrayList.listIterator(3); while (listIterator.hasNext()) { System.out.print(listIterator.next() + "\t"); } System.out.println(); // removes element at index 5 arrayList.remove(5); System.out.println("elements removed and retained"); Set removeAll = new HashSet(); removeAll.add(30); removeAll.add(300); removeAll.add(101); arrayList.removeAll(removeAll); Set retainAll = new HashSet(); retainAll.add(10); retainAll.add(20); retainAll.add(200); retainAll.add(-10); retainAll.addAll(addAll); arrayList.retainAll(retainAll); arrayList.set(1, 101); System.out.println("the size of the arrayList is " + arrayList.size()); System.out.println("the elements of the returned list are"); List list = arrayList.subList(0,1); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i) + "\t"); } System.out.println(); System.out.println("the elements of returned array are"); Object[] array = (Object[]) arrayList.toArray(); for (int i = 0; i < array.length; i++) { System.out.print(array[i] + "\t"); } System.out.println(); arrayList.trimToSize(); System.out.println("the size of the arrayList is " + arrayList.size()); arrayList.clear(); if (arrayList.isEmpty()) System.out.println("the arrayList is empty"); else System.out.println("the arrayList is not empty"); } } /* the arrayList contains 101 the arrayList contains 102 at index 5 the index of 101 is 7 the elements of arrayList are 10 20 30 40 -10 102 103 101 101 200 300 the last index of 101 is 8 elements from index 3 are 40 -10 102 103 101 101 200 300 elements removed and retained the size of the arrayList is 2 the elements of the returned list are 40 the elements of returned array are 40 101 the size of the arrayList is 2 the arrayList is empty