实现ArrayList

public class MyList {
	private transient Object[] elementData;
	private int size;
	
	public MyList(int initialCapacity) {
		elementData = new Object[initialCapacity];
	}
	public MyList() {
		this(10);
	}
	public void add(Object obj) {
		if (size == elementData.length) {
			Object[] newElementData = increase();// 扩容
			elementData = newElementData;
		}
		elementData[size++] = obj;
	}
	// 扩容方法
	public Object[] increase(){
		Object[] newElementData = new Object[(size << 1)];// 扩容到2倍
		System.arraycopy(elementData, 0, newElementData, 0,
				elementData.length);
		return newElementData;
	}
	// 删除
	public boolean remove(int i) {
		// 删除不需要考虑库容问题,把后面的索引指向下一个对象,最后一个对象清空
		if(i>=0 && i<size){
			for (int j = i; j < size; j++) {
				elementData[j] = elementData[j + 1];
			}
			size--;
			return Boolean.TRUE;
		}
		return Boolean.FALSE;
	}
	// 修改
	public boolean modify(int i,Object obj) {
		if(i>=0 && i<size){
			elementData[i]=obj;
		}
		return Boolean.FALSE;
	}
	// 获取某一个
	public Object get(int i) {
		if (i <= size) {
			return elementData[i];
		}
		return null;
	}
	public boolean isEmpty() {
		return size == 0;
	}
	public int size() {
		return size;
	}
	public static void main(String[] args) {
		MyList list = new MyList();
		list.add("1");
		list.add("2");
		list.add("3");
		list.add("4");
		list.add("5");
		list.add("6");
		list.add("7");
		list.add("8");
		list.add("9");
		list.add("10");
		list.add("11");
		list.add("12");
		list.add("13");
		list.remove(1);
		//list.modify(11, 88);// 最后一个改为88
		for (int j = 0; j < list.size; j++) {
			System.out.println(list.get(j));
		}
		System.out.println(list.get(1000));
	}
}

 删除方法用了最原始的方式,并没有用System.arraycopy,其实是一样的

猜你喜欢

转载自hangzhoujava.iteye.com/blog/2268273
今日推荐