首页>代码>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;
	}
	/**
	 * 查询所有的元素
	 * @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();
	}
}
最近下载更多
                
                
                
                
                
最近浏览