zoukankan      html  css  js  c++  java
  • 模拟实现顺序表ArrayList

    /**
     * 顺序表,重点是数组动态扩容,插入
     * 底层采用数组,长度可以动态变化,此处采用增长一倍,而java.util.ArrayList每次增长50%
     *  int newCapacity = oldCapacity + (oldCapacity >> 1);
     *
     */
    public class ArrayList implements List{
         private Object[] elementData;//底层数组
         private int size;//元素个数
    
         public ArrayList(int initialCapacity) {
            //给数组分配指定数量空间
             elementData = new Object[initialCapacity];
            //指定顺序表元素个数,默认是0
            //size = 0;
         }
         
         public ArrayList() {
           //没有指定长度,默认initialCapacity是4
             this(4);
          //没有指定长度,长度是0
    //         elementData = new Object[]{};
         }
         
        @Override
        public int size() {
            // TODO Auto-generated method stub
            return size;
        }
    
        @Override
        public Object get(int i) {
            if(i<0||i>size-1){
                throw new RuntimeException("数组指针越界:"+i);
            }
            return elementData[i];
        }
    
        @Override
        public boolean isEmpty() {
            // TODO Auto-generated method stub
            return size == 0;
        }
    
        @Override
        public boolean contains(Object e) {
            // TODO Auto-generated method stub
            return false;
        }
    
        @Override
        public int indexOf(Object e) {
            // TODO Auto-generated method stub
            return 0;
        }
    
        @Override
        public void add(int i, Object e) {
            if(i<0||i>size){
                throw new RuntimeException("数组指针越界异常:"+i);
            }
           if(size == elementData.length)
            {
                grow();
            }
            for(int j =size ; j>i  ; j--){
                elementData[j] = elementData[j-1];
            }
            elementData[i] = e;
            size++;
            
        }
    
        @Override
        public void add(Object e) {
            
            this.add(size, e);
    //    //动态扩容
    //    if(size == elementData.length)
    //    {
    //        grow();
    //    }     //        elementData[size] = e;
    //        size++;
    //        //System.out.println("length="+elementData.length);
        }
        
        public void grow(){
    //        Object[] newArr = new Object[size*2];
    //        for(int i = 0; i<size;i++){
    //            newArr[i] = elementData[i];                
    //        }
    //        elementData = newArr;
        elementData = Arrays.copyOf(elementData, elementData.length*2);
        }
    }
  • 相关阅读:
    golang中os/user包用法
    golang中os包用法
    与table有关的布局
    jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version
    canvas里调用getImageData的报security的问题
    CSS样式覆盖规则
    windows7文件夹怎样默认图片大图显示?
    Jboss,Tomcat 远程调试配置
    IE(IE6/IE7/IE8)支持HTML5标签
    JS 继承(类式 与 原型式)
  • 原文地址:https://www.cnblogs.com/ltfxy/p/9809065.html
Copyright © 2011-2022 走看看