手写ArrayList
package review;
public class MyArrayList<E> {
private static final int DEFAULTCAPACITY = 10;
private Object[] elementData;
int size = 0;
public MyArrayList() {
elementData = new Object[DEFAULTCAPACITY];
}
public void set(int index, E e) {
this.elementData[index] = e;
}
public E get(int index) {
checkRange(index);
return (E) elementData[index];
}
public void remove(int index) {
checkRange(index);
System.arraycopy(elementData, index + 1, elementData, index, size - index - 1);
size--;
}
public void remove(E e) {
boolean flag = false;
for (int i = 0; i < size; i++) {
if (elementData[i].equals(e)) {
remove(i);
}
}
size--;
}
public void add(E e) {
if (size == elementData.length) {
newCapacity();
}
elementData[size++] = e;
}
public void add(int index, E e) {
checkRange(index);
System.arraycopy(elementData, index, elementData, index + 1, size - index);
elementData[index] = e;
}
private void newCapacity() {
int len = elementData.length + (elementData.length >> 1);
Object[] newElementData = new Object[len];
System.arraycopy(elementData, 0, newElementData, 0, elementData.length);
elementData = newElementData;
}
private void checkRange(int index) {
if (index == size || index < 0) {
System.out.println("下标越界!");
return;
}
}
@Override
public String toString() {
StringBuilder sBuilder = new StringBuilder();
sBuilder.append("[");
for (int i = 0; i < size; i++) {
sBuilder.append(elementData[i] + ",");
}
sBuilder.setCharAt(sBuilder.length() - 1, ']');
return sBuilder.toString();
}
public static void main(String[] args) {
MyArrayList<Integer> list = new MyArrayList<>();
for (int i = 0; i < 16; i++) {
list.add(i);
}
System.out.println(list);
list.add(16);
System.out.println(list);
list.remove(16);
System.out.println(list);
list.add(0);
System.out.println(list.get(12));
list.remove(1);
System.out.println(list);
list.set(0, 118);
System.out.println(list);
}
}