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;
	}
	/**
	 * 查询所有的元素
	 * @return
	 */
	public String getAll(){
		StringBuilder sb = new StringBuilder();
		Object obj = null;
		for(int i = 0; i < size; i ++){
			obj  = elementData[i];
			sb.append(obj).append("\n");
		}
		return sb.toString();
	}
}
最近下载更多
aisuzhen  LV10 2019年9月24日
kenpfang  LV18 2018年5月18日
test3d21  LV5 2017年12月28日
ysyxlnm  LV13 2017年12月15日
欧阳小攀  LV12 2017年12月15日
lihui870224  LV9 2017年12月1日
修罗  LV5 2017年11月27日
jiaoshen  LV3 2017年11月25日
最代码官方  LV168 2017年11月24日
最近浏览更多
tangjj7260  LV18 2021年11月19日
李杰 2021年7月14日
暂无贡献等级
 LV10 2021年6月12日
liuhao_  LV2 2021年6月10日
kidsky  LV8 2020年2月18日
sosabiao  LV5 2020年1月3日
ZY1133  LV1 2019年12月26日
寒雪青松  LV2 2019年12月5日
aisuzhen  LV10 2019年9月24日
里更debug  LV10 2019年5月12日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友