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

最近浏览