// String only version public class MyArrayList { private String[] data; private int maxindex = -1; public MyArrayList(int size) { data = new String[size]; } public MyArrayList() { this(10); } public String get(int index) { if (index >= 0 && index < data.length) { return data[index]; } else { throw new IndexOutOfBoundsException(); } } public void add(String i) { if (maxindex < data.length - 1) { maxindex++; data[maxindex] = i; } else { // +1 just to avoid annoying data.length==0 case! String[] newdata = new String[data.length * 2 + 1]; for (int j = 0; j <= maxindex; j++) { newdata[j] = data[j]; } data = newdata; add(i); } } public int indexOf(String o) { for (int i = 0; i <= maxindex; i++) { // paste the condition out of the documentation! if (o==null ? get(i)==null : o.equals(get(i))) { return i; } } return -1; } public void remove(int i) { // decide whether we need to shrink the list if (maxindex * 2 < data.length) { String[] newdata = new String[maxindex]; for (int j = 0; j < i; j++) { newdata[j] = data[j]; } for (int j = i+1; j <= maxindex; j++) { newdata[j-1] = data[j]; } data = newdata; maxindex--; } else { for (int j = i+1; j <= maxindex; j++) { data[j-1] = data[j]; } maxindex--; } } }