ArrayList

作者: Alsan_L3 | 来源:发表于2022-02-24 16:20 被阅读0次

    实现:

     ArrayList内部实现是由一个数组实现的,我们增加、删除都是操作该数据,所以他继承了数组的一些优缺点。
    

    优点:

    1. 查询速度快

    缺点

    1. 增加到一定大小时,会触发数组的扩容,而且当前数组的默认长度是实际长度的1.5倍,存在额外的内存开销
    2. add和remove操作都是通过数组的复制来实现的,这两种操作太多,也会有一定的性能问题
    3. 线程不安全

    实现类图:

    微信截图_20220222113417

    如何实现一个简单的ArrayList:

    1. 自定义一个类:CustomArrayList
    2. 创建一个数组,定义数组默认大小和扩容策略
    3. 实现方法:add、get、remove、size、iterator等方法
    4. 这样一个简单的ArrayList就实现了
    代码实现如下:
    public class CustomArrayList<T> {
        private Object[] elementArr;
        private int size;
    
        public CustomArrayList(int initialCapacity) {
            if(initialCapacity < 0){
                throw new IllegalArgumentException("初始大小不能小于0");
            }
            elementArr = new Object[initialCapacity];
        }
    
        public CustomArrayList() {
            this(10);
        }
    
        public boolean add(T t){
            if(size == elementArr.length){
                Object[] temp = new Object[size*2 + 1];
                System.arraycopy(elementArr, 0, temp, 0, elementArr.length);
                elementArr = temp;
            }
            elementArr[size ++] = t;
            return true;
        }
    
        public void remove(int index){
            if(index < 0 || index >= size){
                throw new ArrayIndexOutOfBoundsException("索引超出数组边界");
            }
    
            int m = size - index - 1;
            if(m > 0){
                System.arraycopy(elementArr, index + 1, elementArr, index, m);
            }
            elementArr[--size] = null;
        }
    
        public void remove(T t){
            if(t != null){
                for(int i = 0; i < size; i ++){
                    if(elementArr[i] == t){
                        remove(i);
                    }
                }
            }
        }
    
        public T get(int index){
            if(index < 0 || index >= size){
                throw new ArrayIndexOutOfBoundsException("索引超出数组边界");
            }
            return (T) elementArr[index];
        }
    
        public int size(){
            return this.size;
        }
    
        public static void main(String[] args) {
            CustomArrayList<Integer> s=new CustomArrayList();
            s.add(1);
            s.add(2);
            s.add(3);
            s.add(4);
            System.out.println("集合长度:"+s.size());
            s.remove(1);
            for (int i = 0; i < s.size(); i++) {
                System.out.println(s.get(i));
            }
        }
    
    }
    

    相关文章

      网友评论

        本文标题:ArrayList

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