package cn.com.test04;
import java.util.ArrayList;
import java.util.Arrays;
class MyArrayList<T>{
private Object[] obj;
private int size=0;
MyArrayList(){
this.obj= new Object[10];//this(10);
}
MyArrayList(int length){
this.obj= new Object[length];
}
public void add(T o){
automaticAdd();//判断数组是否需要增长
this.obj[size]=o;
size++;
}
public void add(int index,T o){
automaticAdd();
System.arraycopy(obj, index, obj, index+1, size-index);
this.obj[index]=o;
size++;
}
public T get(int index){
if(index<0||index>=size){
// System.err.print("位置不对");
throw new IndexOutOfBoundsException(
"Index: "+index+", Size: "+size);
}
return (T)obj[index];
}
public int size(){
return this.size;
}
private void automaticAdd(){
if(size>=obj.length*0.75){
Object[] o=new Object[(int) (obj.length*1.5)];
System.arraycopy(obj, 0, o, 0, size);
obj=o;
}
}
public void update(int index,T o){
if(index<0||index>=size){
// System.err.print("位置不对");
throw new IndexOutOfBoundsException(
"Index: "+index+", Size: "+size);
}
obj[index]=o;
}
public T remove(int index){
if(index<0||index>=size){
throw new IndexOutOfBoundsException(
"Index: "+index+", Size: "+size);
}
automaticRemove();
T t=(T)obj[index];
System.arraycopy(obj, index+1, obj, index, size-index-1);
size--;
return t;
}
private void automaticRemove(){
if(size<=obj.length*0.7){
Object[] o=new Object[(int) (obj.length*0.75)];
System.arraycopy(obj, 0, o, 0, size);
obj=o;
}
}
public int indexOf(T o){
for(int i=0;i<size();i++){
if((T)obj[i]==o){
return i;
}
}
return -1;
}
public T[] toArray(){
Object[] sss = Arrays.copyOf(obj, size);
return (T[])sss;
}
}
public class t03 {
public static void main(String[] args) {
ArrayList<String> l= new ArrayList<String>();// 底层用数组实现 查询 修改 方便 指定位置增加 删除效率低下
l.add("aa");l.add("bbb"); l.add("aa");
System.out.println(l.size());
l.add("bbb"); l.add("aa");l.add("bbb"); l.add("aa");l.add(2,"aa");
System.out.println(l.remove(1)+"==========="); ;
System.out.println(l.indexOf("bbb")+"--------------");
//l.update(0, "llllllllllllllll");
Object[] sad = l.toArray();
for(int i=0;i<sad.length;i++){
System.out.println("++"+sad[i]);
}
// t03.show(l);
}
public static void show(MyArrayList l){
for(int i=0;i<l.size();i++){
System.out.println(l.get(i));
}
}
}