手写ArrayList

手写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);

	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值