1 //使用泛型 E 2 public class MyArrayList<E> { 3 //定义一个数组 4 private Object[] elementData; 5 private int size; 6 public MyArrayList() { 7 this(10);//初始化 8 } 9 10 public MyArrayList(int initCapacity) { 11 if(initCapacity<0){ 12 try { 13 throw new Exception(); 14 } catch (Exception e) { 15 e.printStackTrace(); 16 } 17 } 18 //初始化容量为10 19 elementData=new Object[initCapacity]; 20 } 21 22 23 //数组长度 24 public int size(){ 25 return size; 26 } 27 28 29 //空判断 30 public boolean isEmpty(){ 31 return size==0; 32 } 33 34 35 //索引越界判断 36 public void rangeCheck(int index){ 37 if(size<0||index>=size){ 38 try { 39 throw new Exception(); 40 } catch (Exception e) { 41 e.printStackTrace(); 42 } 43 } 44 } 45 46 /* 47 * 容量扩容验证 :重点理解arraycopy方法中五个参数的含义 48 * System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length); 49 * @param src the source array. 50 * @param srcPos starting position in the source array. 51 * @param dest the destination array. 52 * @param destPos starting position in the destination data. 53 * @param length the number of array elements to be copied. 54 */ 55 public void ensureCapacity(){ 56 if(size>=elementData.length){//扩容1.5倍 57 Object[] temp=new Object[elementData.length*3/2]; 58 System.arraycopy(elementData, 0, temp, 0, size); 59 elementData=temp; 60 } 61 62 } 63 //添加一个元素 64 public void add(E obj){ 65 ensureCapacity(); 66 elementData[size++]=obj; 67 } 68 69 //指定位置添加一个元素 70 public void add(int index,E obj){ 71 rangeCheck(index); 72 ensureCapacity(); 73 System.arraycopy(elementData, index, elementData, index+1, size-index); 74 elementData[index]=obj; 75 size++; 76 } 77 //获取指定位置一个元素 78 public Object get(int index){ 79 rangeCheck(index); 80 return elementData[index]; 81 } 82 //源码是直接返回原来的值,我就不返回了 83 public void set(int index,E obj){ 84 rangeCheck(index); 85 elementData[index]=obj; 86 } 87 //移除指定位置一个元素 88 public void remove(int index){ 89 rangeCheck(index); 90 System.arraycopy(elementData, index+1, elementData, index, size-index); 91 size--; 92 } 93 @Override 94 public String toString() { 95 return "MyArrayList [elementData=" + Arrays.toString(elementData) + ", size=" + size + "]"; 96 } 97 98 99 100 public static void main(String[] args) { 101 MyArrayList<String> myList = new MyArrayList<String>(); 102 myList.add("lan"); 103 myList.add("po"); 104 myList.add("zui"); 105 myList.add("la"); 106 myList.add("ji"); 107 myList.add("ai"); 108 myList.add("ku"); 109 myList.add("you"); 110 myList.add("ai"); 111 myList.add("nao"); 112 System.out.println(myList); 113 System.out.println("指定位置添加元素======"); 114 myList.add(1, "lu"); 115 System.out.println(myList); 116 System.out.println("获取指定元素======"); 117 Object object = myList.get(1); 118 System.out.println("get(1)= "+object); 119 System.out.println(myList); 120 System.out.println("get(1)修改指定元素======"); 121 myList.set(1, "haha"); 122 System.out.println(myList); 123 System.out.println("get(1)=移除指定元素======"); 124 myList.remove(1); 125 System.out.println(myList); 126 } 127 128 }
打印结果