package org.learning.container;
public class ArrayList {
private Object [] objs = null;
private int index = -1;
public ArrayList(){
objs = new Object[5];
}
public ArrayList(int size){
objs = new Object[size];
}
/**
* ����һ���µ�����
* @param src
* @param src_index
* @param dest
* @param dest_index
* @param length
* @return
*/
private static Object[] copy(Object[] src,int src_index,Object[] dest,int dest_index,int length){
System.arraycopy(src, src_index, dest, dest_index, length);
return dest;
}
public void add(Object obj){
if(this.index == objs.length-1) {
Object[] dest = new Object[objs.length+5];
objs = copy(objs,0,dest,0,objs.length);
}
this.index ++;
objs[this.index] = obj;
}
public void add(int index,Object obj){
if(index-1 > this.index || index < 0){
throw new IndexOutOfBoundsException();
}
Object[] dest = new Object[objs.length+5];
if(index == 0){
dest[index] = obj;
dest =copy(objs,index,dest,index+1,getSize());
objs = dest;
}else if(index == getSize()){
objs[index] = obj;
}else{
dest = copy(objs,0,dest,0,index);//ǰ����
dest[index] = obj; //�м䲿��
dest =copy(objs,index,dest,index+1,getSize()-index);//��
objs = dest;
}
this.index++;
}
public Object get(int index){
if(index > this.index || index <0){
throw new IndexOutOfBoundsException();
}
return objs[index];
}
public boolean isEmpty(){
if(objs == null || this.index == -1){
return true;
}
return false;
}
public int getSize(){
return this.index+1;
}
public boolean remove(int index){
if (index <0 || index > objs.length){
throw new IndexOutOfBoundsException();
}
Object[] dest = new Object[this.index];
dest = copy(objs,0,dest,0,index);//ǰ����
dest = copy(objs,index+1,dest,index,this.index-index);//��
objs = dest;
this.index --;
return true;
}
public boolean remove(Object obj){
for(int i=0;i<=this.index;i++){
if(obj==null ? get(i)==null : obj.equals(get(i))) {
remove(i); //i �� ��ǰԪ�ص��±�ʶ
return true;
}
}
return false;
}
public static void print(Object obj){
System.out.println(obj);
}
public static void main(String [] args){
ArrayList al = new ArrayList();
/*print(al.isEmpty());
al.add("a1");
print(al.isEmpty());
print(al.getSize());
print(al.get(0));
print(al.get(1));*/
al.add("a0");
al.add("a1");
al.add("a2");
al.add("a3");
al.add("a4");
al.add("a5");
//al.remove(0);
//al.remove(5);
//al.remove(2);
/*boolean flag = al.remove("a7");
print(flag);
for(int i=0;i<al.getSize();i++){
print(al.get(i));
}*/
/*print(al.get(0));
print(al.get(5));
print(al.get(6));*/
//print(al.getSize());
//print(al.get(-1)); ok
//print(al.get(0));
//print(al.get(5));
//print(al.get(6));
/*for(int i=0;i<al.getSize();i++){
print(al.get(i));
}
print("---------------------��������Ϊadd");*/
al.add(0, "a00");
al.add(5, "a6");
for(int i=0;i<10;i++){
print(al.get(i));
}
print("---------------------��������Ϊadd(index,obj)");
/*al.add(6, "a6");
al.add("a7");
for(int i=0;i<al.getSize();i++){
print(al.get(i));
}
print("---------------------��������Ϊadd(index,obj)");*/
/*al.add("a0");
al.add("a1");
al.add("a2");
al.add("a3");
al.add("a4");
al.add("a5");
al.add("a6");
print(al.isEmpty());
print(al.getSize());
print(al.get(0));
print(al.get(5));
//al.add(5,"5.5");
for(int i=0;i<al.getSize();i++){
print("i"+i+":"+(al.get(i)));
}
//print(al.remove("a4"));
print(al.getSize());
print(al.remove(2));
print("ɾ����");
print(al.getSize());
for(int i=0;i<al.getSize();i++){
print("i"+i+":"+(al.get(i)));
}
print("-----------add a7");
al.add("a7");
al.add(2,"a2");*/
/*for(int i=0;i<al.getSize();i++){
print("i"+i+":"+(al.get(i)));
}
print(al.get(6));*/
}
}