import java.security.PublicKey;
/*
* 18/11/26
*/
public class RewriteArrayListCode03 {
private int size;
private Object[] elementDate;
//初始化
public RewriteArrayListCode03(){
this(10);
}
public RewriteArrayListCode03(int initialCapacity){
if(initialCapacity<0){
try {
throw new Exception();
} catch (Exception e) {
e.printStackTrace();
}
}
elementDate=new Object[initialCapacity];
}
//添加元素
public void add(Object obj){
capacityCheck();
elementDate[size++]=obj;
}
//在指定位置添加元素
public void add(int index,Object element){
rangeCheck(index);
capacityCheck();
System.arraycopy(elementDate, index, elementDate, index+1, size-index);
elementDate[index]=element;
size++;
}
public int size(){
return size;
}
//是否为空
public boolean isEmpty(){
return size==0;
}
//得到指定位置元素
public Object get(int index){
rangeCheck(index);
return elementDate[index];
}
//删除指定位置对象
public void remove(int index){
rangeCheck(index);
int numMoved=size-index-1;
if(numMoved>0){
System.arraycopy(elementDate, index+1, elementDate, index, numMoved);
}
// for(int i=index+1;i<elementDate.length-1;i++){
// elementDate[i-1]=elementDate[i];
// }
elementDate[--size]=null;//最后个元素为空,并且size-1
}
//删除指定对象(只删除1个)
//特别注意:这里用的equals方法,在处理String型的时候,"aaa",new String"aaa",视为相同对象
public void remove(Object obj){
for(int i=0;i<size;i++){
if(get(i).equals(obj)){//调用equals
remove(i);
}
}
}
//在指定位置修改元素
public Object set(int index,Object obj){
rangeCheck(index);
Object oldValue=elementDate[index];
elementDate[index]=obj;
return oldValue;
}
//范围检测
private void rangeCheck(int index){
if(index<0||index>=size){
try {
throw new Exception();
} catch (Exception e) {
e.printStackTrace();
}
}
}
//容量检查
private void capacityCheck(){
//数组扩容
if(size==elementDate.length){
Object[] newArray=new Object[size*2+1];
//拷贝(将老数组从0开始拷贝.length个元素,到新数组的0位置处)
System.arraycopy(elementDate, 0, newArray, 0, elementDate.length);
// for(int i=0;i<elementDate.length;i++)
// {
// newArray[i]=elementDate[i];
// }
elementDate=newArray;
}
}
public static void main(String[] args){
RewriteArrayListCode03 list=new RewriteArrayListCode03(3);
list.add("1111");
list.add("2222");
list.add("3333");
list.add("4444");
list.add("5555");
System.out.println(list.size());
System.out.println(list.get(3));//得到下标为3的元素
list.remove(2);//移除下标为2的元素
System.out.println(list.get(2));
list.add(new String("5555"));
System.out.println(list.size());
list.remove("5555");//删除的是"5555",不是new "5555".
list.remove("5555");//删除new "5555"
System.out.println(list.size());
System.out.println(list.set(1,2222222));
}
}