手写ArrayList

mac2022-06-30  20

手写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) { // 假设a b c d e 5个元素,要删除第2个元素c。就相当于把后面的元素移动5-2-1 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() { // TODO Auto-generated method stub 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) { // TODO Auto-generated method stub 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); } }
最新回复(0)