2019年1月18日

自定义定义实现Arraylist底层代码:

package cn.liu.three;
/**
 * 构建一个自己的ArrayList
 * @author dell
 *
 */

public class MyArrayList {
	private Object[] elementData; 
	private int size;
	
	
	
	public MyArrayList() {
		this(10);
	}
	public MyArrayList(int  initialcapacity ) {
		if (initialcapacity<0) {
			try {
				throw new Exception();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		this.elementData=new Object[initialcapacity];	
	}
	private  void ensurecapacity(){
		//数组的扩容和数据的拷贝
		if(size==elementData.length) {
			Object[] newArraylist=new Object[size*2+1];
			System.arraycopy(elementData, 0, newArraylist, 0, elementData.length);
			for(int i=0;i<elementData.length;i++) {
				newArraylist[i]=elementData[i];
			}
			elementData=newArraylist;
		}	
	}
	private void rangecheck(int index) {
		if(index<0||index>=size) {
		   try {
			throw new Exception();
		} catch (Exception e) {
			e.printStackTrace();
		}	 
		}
	}
	//构建Arraylist方法
	public int size() {
		return size;
	}
	public boolean isEmpty() {
		return size==0;
	}
	public void add(Object obj) {
		if(size==elementData.length) {
			Object[] newArraylist=new Object[size*2+1];
			System.arraycopy(elementData, 0, newArraylist, 0, elementData.length);
			for(int i=0;i<elementData.length;i++) {
				newArraylist[i]=elementData[i];
			}
			elementData=newArraylist;
		}
		elementData[size++]=obj;
	}
	public Object get(int index) {
		rangecheck(index);
		return elementData[index];
	}
	public Object set(int index, Object obj ) {
		rangecheck(index);
		Object OldValue=elementData[index];
		elementData[index]=obj;
		return OldValue;
	}
	public void remove(int index) {
		rangecheck(index);
		int numMoved = size - index - 1;
		if (numMoved > 0){
			System.arraycopy(elementData, index+1, elementData, index,numMoved);
		}
		elementData[--size] = null; 
	}
	public void remove(Object obj){
		for(int i=0;i<size;i++){
			if(get(i).equals(obj)){  //注意:底层调用的equals方法而不是==.
				remove(i);
			}
		}
	}
	public void add(int index, Object obj) {
		rangecheck(index);
        ensurecapacity();  //数组扩容
		
		System.arraycopy(elementData, index, elementData, index + 1,size - index);
		elementData[index] = obj;
		size++;
	}
	
		
	public static void main(String[] args) {
		MyArrayList list=new MyArrayList(3);
		list.add("qwer");
		list.add("123");
		list.add("12345");
		list.add("33333");
		list.get(3);
		list.add(4,"ertyu");
		System.out.println(list.set(2,"777"));
	    System.out.println(list.get(4));	
		
	}
}

猜你喜欢

转载自blog.csdn.net/qq_44370562/article/details/86537987