package dataStructures.list;
public class AnyType {
}
package dataStructures.list;
import java.util.Iterator;
import java.util.NoSuchElementException;
public class MyArrayList<AnyType>{
private static final int DEFAULT_CAPACITY=10;
private int theSize;
private AnyType[] theItems;
MyArrayList(){
ensureCapacity(DEFAULT_CAPACITY);
}
public int size() {
return theSize;
}
public boolean isEmpty() {
return size()==0;
}
public Object get(int idx) {
if(idx<0 || idx>=size()) {
throw new ArrayIndexOutOfBoundsException();
}
return theItems[idx];
}
public void ensureCapacity(int newCapacity) {
if(newCapacity<theSize) {
return;
}
AnyType[] old=theItems;
theItems=(AnyType[])new Object[newCapacity];
for (int i = 0; i < size(); i++) {
theItems[i]=old[i];
}
}
public boolean add(AnyType x) {
add(size(),x);
return true;
}
public void add(int idx,AnyType x) {
if(theItems.length==size()) {
ensureCapacity(size()*2+1);
}
for (int i = theSize; i > idx; i--) {
theItems[i]=theItems[i-1];
}
theItems[idx]=x;
theSize++;
}
public AnyType remove(int idx) {
AnyType removeItems=theItems[idx];
for (int i = idx; i < size()-1; i++) {
theItems[i]=theItems[i+1];
}
theSize--;
return removeItems;
}
public Iterator<AnyType> iterator(){
return new ArrayListIterator();
}
private class ArrayListIterator implements Iterator<AnyType>{
private int current=0;
@Override
public boolean hasNext() {
return current<size();
}
@Override
public AnyType next() {
if(!hasNext()) {
throw new NoSuchElementException();
}
return theItems[current++];
}
public void remove() {
MyArrayList.this.remove(--current);
}
}
public static void main(String[] args) {
MyArrayList list=new MyArrayList();
list.add("haha");
list.add("wawa");
list.add("gaga");
list.add("qaqa");
list.add("eaea");
list.add("rara");
list.add("tata");
System.out.println(list.get(0));
System.out.println("remove: "+list.remove(0));
System.out.println(list.get(0));
Iterator iterator=list.iterator();
while (iterator.hasNext()) {
System.out.println("iterator: "+iterator.next());
}
}
}