首页>代码>java对象ArrayList和LinkedList的源码解析及其基本增删改查功能的实现>/collection/src/com/jackie/collection/arraylist/MyArrayList.java
package com.jackie.collection.arraylist;


public class MyArrayList {
	private Object[] elementData;//ArrayList中的元素数组
	private int size;//ArrayList的长度
	private final int INITIAL_CAPACITY = 10;//默认初始化长度
	//获取arraylist的长度
	public int size() {
		return size;
	}
	/**
	 * 无参数构造器,用于实例化
	 */
	public MyArrayList() {
		this(10);
	}
	/**
	 * 带参数构造器
	 * @param capacity
	 */
	public MyArrayList(int initCapacity){
		if(initCapacity > 0){
			elementData = new Object[initCapacity];//默认初始化数组长度为10
		}else if(initCapacity == 0){
			elementData = new Object[INITIAL_CAPACITY];
		}else{
			try {
				throw new Exception("您输入的初始化长度" + initCapacity + "不合法!");
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	/**
	 * 添加 在末尾进行添加
	 * @param obj
	 */
	public void add(Object obj){
		if(size != 0){
			elementData[size++] = obj;
		}else{
			elementData[size] = obj;
			size ++;
		}
	}
	/**
	 * 在某个位置插入元素
	 * @param index
	 * @param obj
	 * @return
	 */
	public void insert(int index,Object obj){
		rangeCheck(index);
		System.arraycopy(elementData, index, elementData, index+1, size - index);
		elementData[index] = obj;
		size ++;
	}
	/**
	 * ArrayList扩容
	 * @param capacity
	 */
	public void ensureCapacity(int capacity){
		if(capacity > INITIAL_CAPACITY){
			capacity = capacity * 2 + 1;
		}
	}
	/**
	 * 校验索引是否合法及是否越界
	 * @param index
	 */
	public void rangeCheck(int index){
		if(index < 0){
			try {
				throw new Exception("INDEX:" + index + " is illegal!");
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		if(index > size){
			try {
				throw new Exception("INDEX:" + index + " 越界!");
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	/**
	 * 获取某个索引位置上的元素
	 * @param index 索引
	 * @return 返回索引位置上的元素  若获取到该位置上的元素则返回该元素 obj  否则返回null
	 */
	public Object getObj(int index){
		rangeCheck(index);
		Object obj = elementData[index];
		if(obj != null){
			return obj;
		}else{
			return null;
		}
	}
	/**
	 * 删除某个索引位置上的元素 
	 * @param index 索引目标位置
	 */
	public void remove(int index){
		rangeCheck(index);
		System.arraycopy(elementData, index + 1, elementData, index, size -index - 1);
		elementData[--size] = null;//删除后将最后以一个置空
	}
	/**
	 * 更改某个索引位置的元素
	 * @param index 目标索引
	 * @param obj  目标对象值
	 * @return
	 */
	public Object setObj(int index , Object obj){
		rangeCheck(index);
		Object oldValue = getObj(index);
		if(oldValue != null){
			elementData[index] = obj;
			oldValue = elementData[index];
		}
		return oldValue;
	}
}
最近下载更多
zhipeng553  LV5 2017年11月24日
woshishen  LV10 2017年11月24日
最代码官方  LV168 2017年11月24日
最近浏览更多
阿布屋脊  LV7 2022年6月7日
忧麦紫  LV18 2021年6月10日
小菜鸡1231 2019年10月20日
暂无贡献等级
3163434  LV1 2019年9月23日
lczd888  LV9 2019年7月17日
孤寒双月泪  LV14 2019年7月16日
angel200288  LV2 2019年3月31日
hyt1996  LV2 2018年12月25日
kingdoms2008 2018年11月23日
暂无贡献等级
audrey11  LV2 2018年11月21日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友