package com.bjsxt.mycollection.myarraylist;
import java.util.Arrays;
/**
* 写一个乞丐版ArrayList,实现add,remove,get
*/
public class myArrayList {
private final int DEFAULT_CAPACITY = 10;//定义默认初始容量为10
private final Object[] DEFAULT_EMPTY_OBJ = {};//定义一个长度为0的Object类型数组
public Object[] defaultObj = {};//空数组
private int size;//数组大小
//(1)无参构造方法
public myArrayList() {
this.defaultObj = DEFAULT_EMPTY_OBJ;
}
//(2)带参构造器
public myArrayList(int Capacity) {//初始长度大于0就创建长度为初始化数值的对象数组
if(Capacity>0) {
this.defaultObj = new Object[Capacity];
}
}
//(3)检测空间容量是否够用
public void ensureCapacityInternal(int minCapacity) {
if(defaultObj==DEFAULT_EMPTY_OBJ) {
minCapacity = Math.max(DEFAULT_CAPACITY,minCapacity);
}
if(minCapacity>defaultObj.length) {
grow(minCapacity);
}
}
//(4)扩容grow方法
public void grow(int minCapacity) {
int oldCapacity = defaultObj.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
if(newCapacity - minCapacity<0) {
newCapacity = minCapacity;
defaultObj = Arrays.copyOf(defaultObj,newCapacity);
}
}
//(5)add方法
public boolean add(Object obj) {
ensureCapacityInternal(size+1);
defaultObj[size++] = obj;
return true;
}
public void add(int index,Object obj) {//根据索引添加
System.arraycopy(defaultObj,index,defaultObj,index+1,size-index);
defaultObj[index] = obj;
size++;
}
//(6)remove方法
public String remove(int index) {
String oldValues = (String)defaultObj[index];
int numMove = index-1;//拷贝的元素个数
if(numMove>0) {
System.arraycopy(defaultObj,index+1,defaultObj,index,numMove);//将后一位拷贝到前一位
defaultObj[--size] = null;//最后一个位置设为空
}
return oldValues;
}
//(7)get方法
public Object get(int index) {
return defaultObj[index];
}
public int size(){
return size;
}
//输出方法
public void print() {
for(Object obj:defaultObj) {
System.out.print(obj+"\t");
}
}
public static void main(String[] args) {
myArrayList list = new myArrayList();
list.add("1");
list.add("2");
list.add("3");
list.add("1");
list.add("2");
list.add("3");
list.add("1");
list.add("2");
list.add("3");
list.add("1");
list.add("2");
list.add("3");
System.out.println("****add()方法****");
list.print();
System.out.println("集合中元素个数:"+list.size);
list.remove(2);
System.out.println("****remove()方法****");
list.print();
System.out.println("集合中元素个数:"+list.size);
System.out.println("****get()方法****");
System.out.println(list.get(1));
}
}
老师,作业要求写一个自己的ArrayList,测试的时候只要添加超过10个就报错,帮忙看一下是哪里出了问题。
