package com.coding.basic; public class ArrayList implements List { private int size = 0; private Object[] elementData = new Object[100]; public void add(Object o) { if (elementData.length == 101 && elementData[100] == null) { for (int i = 0; i < elementData.length; i++) { if (elementData[i] == null) { elementData[i] = o; } } } else { Object[] elementData2 = new Object[elementData.length + 1]; for (int i = 0; i < elementData.length; i++) { elementData2[i] = elementData[i]; } elementData2[elementData2.length - 1] = o; elementData = elementData2; } } public void add(int index, Object o) { if (index < 0 || index > elementData.length - 1) { return; } if (index <= elementData.length - 1) { Object[] elementData2 = new Object[elementData.length + 1]; elementData2[index] = o; for (int i = 0; i < elementData2.length; i++) { if (i < index) { elementData2[i] = elementData[i]; } if (i > index) { elementData2[i + 1] = elementData[i]; } } elementData = elementData2; } } public Object get(int index) { if (elementData.length - 1 < index || index < 0) { return null; } else { return elementData[index]; } } public Object remove(int index) { if (index > elementData.length - 1 || index < 0) { return null; } else { Object result = elementData[index]; for (int i = index; i < elementData.length - 1; i++) { elementData[index] = elementData[index + 1]; } elementData[elementData.length - 1] = null; return result; } } public int size() { return elementData.length; } public Iterator iterator() { return new Iterator() { int cursor = -1; @Override public boolean hasNext() { if (cursor < elementData.length - 1) { return true; } return false; } @Override public Object next() { cursor++; return elementData[cursor]; } }; } }