JAVA—手写ArrayList
List接口
public interface List {
public int size();
public Object get(int i);
public boolean isEmpty();
public boolean contains(Object e);
public int indexOf(Object e);
public void add(int i, Object e);
public void add(Object e);
public boolean addBefore(Object obj, Object e);
public boolean addAfter(Object obj, Object e);
public Object remove(int i);
public boolean remove(Object e);
public Object replace(int i, Object e);
public Iterator iterator();
}
Iterator接口:
public interface Iterator<T> {
boolean hasNext();
T next();
}
ArrayList类
public class ArrayList implements List {
java.util.ArrayList list = new java.util.ArrayList();
private transient Object[] elementData;
private int size;
public ArrayList(){
this(10);
}
public ArrayList(int initialCapacity){
if (initialCapacity < 0)
throw new IllegalArgumentException("索引小于0: "+
initialCapacity);
elementData = new Object[initialCapacity];
}
@Override
public int size() {
return size;
}
@Override
public Object get(int i) {
if (i > size - 1 || i < 0)
throw new ArrayIndexOutOfBoundsException("数组越界了:" + i);
return elementData[i];
}
@Override
public boolean isEmpty() {
return size == 0;
}
@Override
public boolean contains(Object e) {
return indexOf(e) >= 0;
}
@Override
public int indexOf(Object e) {
if (e == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (e.equals(elementData[i]))
return i;
}
return -1;
}
@Override
public void add(int i, Object e) {
grow();
for (int index = size - 1; index >= i; index--){
elementData[index + 1] = elementData[index];
}
elementData[i] = e;
size ++;
}
@Override
public void add(Object e) {
grow();
elementData[size] = e;
size++;
}
@Override
public boolean addBefore(Object obj, Object e) {
return false;
}
@Override
public boolean addAfter(Object obj, Object e) {
return false;
}
@Override
public Object remove(int i) {
if (i > size - 1)
throw new RuntimeException("数组越界了:" + i);
for (int index = i; index < size - 1; index++){
elementData[index] = elementData[index + 1];
}
size--;
return elementData[i];
}
@Override
public boolean remove(Object e) {
return false;
}
@Override
public Object replace(int i, Object e) {
return null;
}
@Override
public Iterator iterator() {
return new Itr();
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder("[");
for (int i = 0; i < size; i++){
sb.append(elementData[i] + ",");
}
if (size > 0){
sb.deleteCharAt(sb.length() - 1);
}
sb.append("]");
return sb.toString();
}
private void grow() {
if (size == elementData.length){
elementData = Arrays.copyOf(elementData, size + (size >> 1));
}
}
private class Itr<T> implements Iterator <T> {
int cursor;
@Override
public boolean hasNext() {
return cursor < size;
}
@Override
public T next() {
if (cursor >= size)
throw new NoSuchElementException("没有这个元素了:" + cursor);
return (T)elementData[cursor++];
}
}
}