【java集合】自己實現簡易的ArrayList,java集合arraylist

來源:互聯網
上載者:User

【java集合】自己實現簡易的ArrayList,java集合arraylist

List介面:

public interface IMyList<E> {    E set(int index, E elem);    boolean add(E e);    boolean remove(Object o);    E remove(int index);    int indexOf(Object o);    E get(int index);    int size();    boolean isEmpty();}

ArrayList實現:

import java.util.Arrays;public class MyArrayList<E> implements IMyList<E> {    private Object[] elementData;    private int size;    public MyArrayList(){        this(10);    }    public MyArrayList(int initialCapacity) {        this.elementData = new Object[initialCapacity];    }    @Override    public E set(int index, E elem) {        E oldElem = elementData(index);        elementData[index] = elem;        return oldElem;    }    //添加元素前要確認空間是否足夠,不夠的話要進行擴容後再添加    @Override    public boolean add(E e) {        ensureCapacity(size+1);        elementData[size++] = e;        return true;    }    @Override    public boolean remove(Object o) {        if (o == null){            for (int i=0, len=elementData.length; i<len; i++)                if (o == elementData[i]){                    fastRemove(i);                    return true;                }        } else {            for (int i=0, len=elementData.length; i<len; i++)                if (o.equals(elementData[i])){                    fastRemove(i);                    return true;                }        }        return false;    }    @Override    public E remove(int index) {        E oldElem = elementData(index);        fastRemove(index);        return oldElem;    }    private void fastRemove(int index){        /**         * 源碼是這樣的         *      int numMoved = size - index - 1;         *      if (numMoved > 0)         *          System.arraycopy(elementData, index+1, elementData, index, numMoved);         *         */        for (int i=index+1; i<size; i++){            elementData[i-1] = elementData[i];        }        elementData[--size] = null;    }    @Override    public int indexOf(Object o) {        for (int i=0, len=elementData.length; i<len; i++)            if (o == elementData[i])                return i;        return -1;    }    @Override    public E get(int index) {        return elementData(index);    }    @Override    public int size() {        return size;    }    @Override    public boolean isEmpty() {        return size == 0;    }    private E elementData(int index){        return (E)elementData[index];    }    //如果空間不夠,要進行擴容,擴容後大小為原來的1.5倍    private void ensureCapacity(int size){        if (size > elementData.length){            int oldCapacity = elementData.length;            int newCapacity = (oldCapacity >> 1) + oldCapacity;            elementData = Arrays.copyOf(elementData, newCapacity);        }    }}

測試代碼:

public class Main {    public static void main(String[] args) {        IMyList<String> list = new MyArrayList<String>();        for (int i=0; i<12; i++){            list.add("s" + i);        }        list.remove("s3");        for (int i=0; i<list.size(); i++){            System.out.println(list.get(i));        }    }}

運行結果:

s0s1s2s4s5s6s7s8s9s10s11


查看評論

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.