• 模拟ArrayList底层实现


    package chengbaoDemo;
     
    import java.util.ArrayList;
    import java.util.Arrays;
    
    import comman.Human;
    /**
     * ArrayList 底层实现
     */
    public class MyArrayList {
        /**
         * The value is used for Object Stroage.
         */
        private Object value[];
    
        /**
         *The size is the number of Object used. 
         */
    
        private int size;
        public MyArrayList() {
    //        value = new Object[10];
            this(10);
        }
        
        public MyArrayList(int size) {
            value = new Object[size];
        }
        
        /**
         *Get the number of array's element  
         */
        public int size() {
            return size;
        }
        
        public boolean isEmpty() {
            return size == 0;
        }
        /**
         *add element into the object storage. 
         */
        public void add(Object obj) {
            value[size] = obj;
            size++;
            //扩容
            if (size >= value.length) {
                ensureCapacity();
            }
        }
        /**
         *扩容 
         */
        public void ensureCapacity() {
            int newLength = value.length * 2 + 2;
            
            Object newObj[] = Arrays.copyOf(value, newLength);
            
            value = newObj;
            
        }
        
        
        /**
         *Get the element from the object storage. 
         */
        public Object get(int size) {
            rangeCheck(size);
            
            return value[size];
        }
        /**
         * Check whether occured  out of bound Exception
         */ 
        public void  rangeCheck(int index) {
            if (index < 0 || index > value.length) {
                try {
                    throw new Exception();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }  
        }
        
        /**
         * Return the index of the first occurrence of the specfied element in this value,
         * or -1 if the value does not contains the specfied element.
         */
        public int indexOf(Object obj) {
            if (obj == null) {
                for (int i = 0 ; i < value.length; i++) {
                    if (value[i] == null) {
                        return i;
                    }
                }
                return -1;
    
            }else {
                for (int i = 0; i < value.length; i++) {
                    if (value[i].equals(obj)) {
                        return i;
                    }
    
                }
                return -1;
            }
        }
        
        
        /**
         *Repaces the element at the specfied position in this object array 
         *with the specfied element.
         */
        public Object set(int index, Object obj) {
            rangeCheck(index);
            Object oldObj = value[index];
            value[index] = obj;
            return oldObj;
            
        }
    
    
        public void printf() {
            for (int i = 0; i < size; i++) {
                System.out.println(value[i]);
            }
        }
        ///测试
        public static void main(String[] args) {
            MyArrayList mal = new MyArrayList(3);
            mal.add("asd");
            mal.add("qwe");
            mal.add("asd");
            mal.add("qwe");
            Human h = new Human("成宝");
            mal.add(h);
            System.out.println(mal.size());
            
            Human hs = (Human)mal.get(4);
            System.out.println(hs.getName());
            mal.add(null);
            System.out.println(mal.get(5));
            System.out.println(mal.indexOf(null));
            
            mal.printf();
        
            mal.set(5, 90);
            
            mal.printf();
    
        }
        
        
    }
  • 相关阅读:
    vscode_sync
    外国it视频教学文件
    关于登录状态,后台应该另外做一个接口来决定是否登录
    判断浏览器信息
    file控件预览
    githutb账号密码
    .net core 实践笔记(三)--封装底层
    .net core 实践笔记(二)--EF连接Azure Sql
    .net core 实践笔记(一)--开篇
    SQL引用DAL
  • 原文地址:https://www.cnblogs.com/chengbao/p/5184601.html
Copyright © 2020-2023  润新知