101-102_容器_JDK源代码分析_自己实现ArrayList

来源:互联网 发布:modemcu 阿里云搭建 编辑:程序博客网 时间:2024/06/06 02:28

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

我们对集合有了深刻的认识,为了加深对ArrayList的了解我们自己封装一个MyArrayList类来模拟ArrayList类,代码如下:

public class MyArrayList {        private Object[] elementData;//底层实现是数组        private int size;        public int size() {            return size;        }        public boolean isEmpty() {            return size == 0;        }        public MyArrayList() {            this(10);        }        public MyArrayList(int initialCapacity) {            if (initialCapacity < 0) {                try {                    throw new Exception();                } catch (Exception e) {                    e.printStackTrace();                }            }            elementData = new Object[initialCapacity];        }        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;            }        }        //下标越界检测        private void rangeCheck(int index) {            if (index < 0 || index >= size) {                try {                    throw new Exception();                } catch (Exception e) {                    e.printStackTrace();                }            }        }        public void add(Object obj) {            ensureCapacity();// 数组扩容            elementData[size++] = obj;        }        public void add(int index, Object obj) {            rangeCheck(index);//索引越界检测            ensureCapacity();//数组扩容            System.arraycopy(elementData, index, elementData, index + 1, size - index);            elementData[index] = obj;            size++;        }        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;        }        public static void main(String[] args) {            MyArrayList slist = new MyArrayList(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));        }    }
阅读全文
0 0
原创粉丝点击