首页>代码>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(); } }
最近下载更多