源无极

导航

 
 
  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 }

 

 


打印结果

posted on 2018-11-29 21:12  源无极  阅读(252)  评论(0编辑  收藏  举报