手写ArrayList的实现
public class MyArrayList<E> {
private Object[] elementData;
private int size;
private static final int DEFALT_CAPACITY = 10;
public MyArrayList() {
elementData = new Object[DEFALT_CAPACITY];
}
public MyArrayList(int capacity) {
if (capacity < 0) {
throw new RuntimeException("容器的容量不合法:" + capacity);
}else if (capacity == 0) {
elementData = new Object[DEFALT_CAPACITY];
}else {
elementData = new Object[capacity];
}
}
public void add(E e) {
if (size == elementData.length) {
Object[] newArray = new Object[elementData.length + (elementData.length >> 1)];
System.arraycopy(elementData, 0, newArray, 0, elementData.length);
elementData = newArray;
}
elementData[size++] = e;
}
public E get(int index) {
if (index < 0 || index > size - 1) {
throw new RuntimeException("索引不合法:" + index);
}
return (E) elementData[index];
}
public void set(E e, int index) {
if (index < 0 || index > size - 1) {
throw new RuntimeException("索引不合法:" + index);
}
elementData[index] = e;
}
public void remove(E element) {
for (int i = 0; i < size; i++) {
if (element.equals(get(i))) {
remove(i);
}
}
}
public void remove(int index) {
int numMoved = elementData.length - index - 1;
if (numMoved > 0) {
System.arraycopy(elementData, index + 1, elementData, index, numMoved);
}
elementData[--size] = null;;
}
public int size() {
return size;
}
public boolean isEmpty() {
return size == 0 ? true : false;
}
@Override
public String toString() {
if(size <= 0) {
return "[]";
}
StringBuilder sb = new StringBuilder();
sb.append('[');
for (int i = 0; i < size; i++) {
sb.append(elementData[i] + ", ");
}
sb.delete(sb.length() - 2, sb.length());
sb.append(']');
return sb.toString();
}
public static void main(String[] args) {
MyArrayList<String> ma = new MyArrayList<String>(20);
for (int i = 0; i < 40; i++) {
ma.add(i + "");
}
ma.set("110000", 10);
System.out.println(ma);
ma.remove("110000");
ma.remove("39");
System.out.println(ma);
System.out.println(ma.size());
}
}