数组的扩容

来源:互联网 发布:linux服务器编程 知乎 编辑:程序博客网 时间:2024/06/06 00:29

通过对List接口的实现类ArrayList的常见方法的应用

package com.bjsxt.list;  public class SxtArrayList {       private Object[] elementData;       private int size;         public int size() {              return size;       }         public boolean isEmpty() {              return size == 0;       }         public SxtArrayList() {              this(10);       }         public SxtArrayList(int initialCapacity) {              if (initialCapacity < 0) {                     try {                            throw new Exception();                     } catch (Exception e) {                            e.printStackTrace();                     }              }              elementData = new Object[initialCapacity];       }         public void add(Object obj) {                // 数组扩容              if (size == elementData.length) {                     Object[] newArray = new Object[size * 2 + 1];                     System.arraycopy(elementData, 0, newArray, 0, elementData.length);                     /*                      * for (int i = 0; i < elementData.length; i++) {                      * newArray[i]=elementData[i]; }                      */                     elementData = newArray;              }              elementData[size++] = obj;              // size++;       }         public void add(int index, Object obj) {              rangeCheck(index);              ensureCapacity();//数组扩容                            System.arraycopy(elementData, index, elementData, index + 1, size - index);              elementData[index] = obj;              size++;       }         private void ensureCapacity() {              // 数组扩容              if (size == elementData.length) {                     Object[] newArray = new Object[size * 2 + 1];                     System.arraycopy(elementData, 0, newArray, 0, elementData.length);                     /*                      * for (int i = 0; i < elementData.length; i++) {                      * newArray[i]=elementData[i]; }                      */                     elementData = newArray;              }         }         public Object get(int index) {              rangeCheck(index);              return elementData[index];       }         public void remove(int index) {              rangeCheck(index);              // 删除指定位置的对象              // a b c d e              if (index < 0 || index >= size) {                     try {                            throw new Exception();                     } catch (Exception e) {                            e.printStackTrace();                     }                     int numMoved = size - index - 1;                     if (numMoved > 0) {                            System.arraycopy(elementData,                     index + 1, elementData, index, numMoved);                     }                     elementData[--size] = null;              }       }         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 = elementData[index];              elementData[index] = obj;              return oldValue;       }         private void rangeCheck(int index) {              if (index < 0 || index >= size) {                     try {                            throw new Exception();                     } catch (Exception e) {                            e.printStackTrace();                     }              }       }         public static void main(String[] args) {              SxtArrayList slist = new SxtArrayList(3);              slist.add(132);              slist.add("444");              slist.add(5);              slist.add("333");              slist.add("333");              slist.add("abc");              slist.add("ccc");              System.out.println(slist.size);              System.out.println(slist.get(6));       }}