美文网首页
2018-09-27模拟ArrayList底层实现、

2018-09-27模拟ArrayList底层实现、

作者: 消失的七月 | 来源:发表于2018-09-28 10:34 被阅读0次

    1.模拟ArrayList底层实现:

    public class MyArrayList {

        StringBuilder s;//防照StringBuilder

        ArrayList a;//在查看Arraylist的一些简单方法

        /**

        *  The value is used for Object storage.

        */

        private Object[] value; 

        /**

        * The size is the number of Objects used.

        */

        private int size;

        public MyArrayList(){

            //value = new Object[16];

            this(10);

        }

        /**

        * Creates an MyArrayList of the specified capacity

        * 指定容量

        */

        public MyArrayList(int size){

            if(size < 0){

            try {

                throw new Exception();

            } catch (Exception e) {

                e.printStackTrace();

        }

    }

        value = new Object[size];

    }

        public void add(Object obj){

            value[size] = obj;

            size++;

            if(size >= value.length){

        //默认为10,大了的时候需要扩容

        int newCapacity = value.length * 2;

        Object[] newList = new Object[newCapacity];

        // System.arraycopy(src, srcPos, dest, destPos, length);

        for(int i = 0;i < value.length;i++){

            newList[i] = value[i];

        }

        value = newList;

        }

    }

        public Object get(int index){

        if(index < 0 || index > size-1){

            try {

                throw new Exception();

            } catch (Exception e) {

                e.printStackTrace();

            }

        }

        return value[index];

    }

        public int size(){

            return size;

    }

    public boolean isEmpty() {

            return size == 0;

    }

    public boolean contains(Object o){

            return Indexof(o) >= 0;

    }

    private int Indexof(Object o) {

        if(o == null){

            for(int i = 0; i < size; i++)

                if(value[i] == null)

                return i;

        }else{

            for (int i = 0; i < size; i++)

                    if (o.equals(value[i]))

                        return i;

        }

        return -1;

    }

        //从头开始检索

        public int indexOf(Object o){

            if(o == null){

            for(int i = 0; i < size; i++){

                if(value[i]==null)

                    return i;

        }

        }else{

            for(int i =0;i < size; i++){

                if(o.equals(value[i]))

                        return i;

        }

        }

        return -1;

    }

    public int lastIndexOf(Object o){

        if(o == null){

            for(int i = size - 1; i >= 0; i--){

                if(value[i]==null)

                    return i;

        }

        }else {

            for(int i = size-1;i >= 0; i--){

                if(o.equals(value[i]))

                return i;

        }

    }

        return -1;

    }

    public static void main(String[] args) {

        MyArrayList myList = new MyArrayList(2);//初始化为16,所以超过是应当去扩容

            myList.add("1");

            myList.add(2);

            myList.add(3);

            myList.add(2);

            myList.add(3);

            myList.add(2);

            myList.add(3);

            System.out.println(myList.get(0));//1

            System.out.println(myList.size);//7

            System.out.println(myList.isEmpty());//false

            System.out.println(myList.contains(null));//false

            System.out.println(myList.lastIndexOf(3));//6

        }

    }

    相关文章

      网友评论

          本文标题:2018-09-27模拟ArrayList底层实现、

          本文链接:https://www.haomeiwen.com/subject/ubueoftx.html