java ArrayList

自己简单的实现了一下ArrayList的基本方法

很简单的那种,没有涉及任何高深的东西,只是为了简单的了解一下ArrayLisy的底层

package c11;

import java.util.ArrayList;
import java.util.List;

/**
 * 实现了一下ArrayList的基本方法
 * 看了一下源码,关于扩容我就暴力点,只要不够就增加一倍
 * @author Administrator
 *
 */
public class CopyArrayList {
	//这个是模板
	List list = new ArrayList<>();
	
	private int size;
	//ArrayList 的底层就是一个数组,所有的操作都围绕这个数组
	private Object[] elementData;
	
	/**
	 * 构造函数,有两种构造函数,一种有参,一种无参。初始化容器容量
	 */
	
	public CopyArrayList(){
		elementData = new Object[10];
	}
	
	public CopyArrayList(int init){
		elementData = new Object[init];
	}
	/**
	 * 扩容
	 */
	private void ensureCapacity(){
		if(size>=elementData.length){
			Object[] newArray = new Object[size*2+1];
			//复制数组,将老数组的值全部copy进新数组
			System.arraycopy(elementData, 0, newArray, 0, elementData.length);
			elementData = newArray;
		}
	}
	
	/**
	 * 是否越界
	 * @throws Exception 
	 */
	private void check(int index){
		if(index>=size){
			try {
				throw new Exception("越界");
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	/**
	 * 获取size
	 */
	public int size(){
		return size;
	}
	
	/**
	 * 判断非空
	 */
	
	public boolean isEmpty(){
		return size == 0;
	}
	
	/**
	 * 添加元素,就是向数组添加元素,但是注意的是,由于刚开始我们默认了容量,所以添加的时候我们要注意,是否超出了
	 */
	public boolean add(Object o){
		ensureCapacity();
		elementData[size++] = o;
		return true;
	}
	
	public boolean add(int index,Object obj){
		check(index);
		ensureCapacity();
		System.arraycopy(elementData, index, elementData, index+1, size-index);
		elementData[index] = obj;
		size++;
		return true;
	}
	/**
	 * 获取元素值,
	 */
	public Object get(int index){
		check(index);
		return elementData[index];
	}
	
	/**
	 * 删除指定位置的元素
	 */
	
	public void remove(int index){
		check(index);
		int num = size-index-1;
		if(num>0){
			System.arraycopy(elementData, index+1, elementData, index, num);
		}
		elementData[--size]=null;
	}
	
	/**
	 * 删除指定的元素
	 */
	
	public boolean remove(Object o){
		for(int i = 0;i<size;i++){
			if(elementData[i].equals(o)){
				remove(i);
				//return 有两种作用,返回值以及结束运行,在这里我们就可以知道,remove删除相同值的第一个
				return true;
			}
		}
		return false;
	}
	
	/**
	 *更改元素值 
	 */
	public boolean set(int index,Object obj){
		check(index);
		elementData[index] = obj;
		return true;
	}
	/**
	 * 测试
	 */
	public static void main(String[] args) {
		CopyArrayList list = new CopyArrayList(3);
		list.add("1111");
		list.add("2222");
		list.add("3333");
		list.add("4444");
		list.add("5555");
		list.add(2, "33");
		list.remove(2);
		list.remove("4444");
		System.out.println(list.size());
		System.out.println(list.isEmpty());
	}
}

猜你喜欢

转载自blog.csdn.net/qq_35815781/article/details/81239445