public class MyArray<T> implements Iterable<T>{ private Object[] arr = null; private int size = 0; public MyArray(int capacity) { if (capacity > 0) { arr = new Object[capacity]; } else { arr = new Object[8]; } size = 0; } public MyArray() { arr = new Object[8]; size = 0; } public boolean isEmpty() { return size == 0; } public T get(int index) { checkIndex(index); return (T)arr[index]; } public void set(int index, T obj) { checkIndex(index); arr[index] = obj; } public void add(T obj) { if (size == arr.length) { grow(); } arr[size++] = obj; } public T removeAt(int index) { checkIndex(index); T elem = (T)arr[index]; for (int i = index+1; i < size; i ++) { arr[i-1] = arr[i]; } arr[size-1] = null; size--; return elem; } private void grow() { int oldCapacity = arr.length; Object[] newArr = new Object[oldCapacity*2]; for (int i = 0; i < arr.length; i ++) { newArr[i] = arr[i]; } arr = newArr; } private void checkIndex(int index) { if (index < 0 || index >= size) { throw new IllegalArgumentException("Illegal index: " + index); } } // TODO : other method about equals, hashCode, subArray, searching, sorting, etc. @Override public Iterator<T> iterator() { return new MyArrayIterator(); } private class MyArrayIterator implements Iterator<T> { private int index = 0; private boolean bNext = false; public MyArrayIterator() { } @Override public boolean hasNext() { return index < MyArray.this.size; } @Override public T next() { bNext = true; return (T)MyArray.this.get(index++); } @Override public void remove() { if (bNext == false) { throw new IllegalStateException("there is no last next() called."); } MyArray.this.removeAt(--index); bNext = false; } } }
Sign in to make a reply
Tiko_T