zoukankan      html  css  js  c++  java
  • Java中ArrayList的自我实现

       对于ArrayList相比大家都很熟悉,它是java中最常用的集合之一。下面就给出它的自我实现的java代码。

       需要说明的一点是,它是基于数组创建的。所以它在内存中是顺序存储,对于查找十分的方便。

       

    package com.pinjia.shop.common.collection;
    
    import java.util.Iterator;
    import java.util.NoSuchElementException;
    
    /**
     * Created by wangwei on 2017/1/3.
     * ArrayList的自己封装,实现
     */
    public class MyArrayList<E> implements Iterable<E> {
    
        private static final int DEFAULT_SIZE = 10;//容器默认大小
        private int theSize;
        private E[] theItems;
    
        public MyArrayList(){
            clear();
        }
    
        public void clear(){
            theSize = 0;
            ensureCapacity(DEFAULT_SIZE);
        }
    
        public int size(){
            return theSize;
        }
    
        public boolean isEmpty(){
            return size() == 0;
        }
    
        public void trimToSize(){
            ensureCapacity(size());
        }
    
        public E get(int idx){
            if(idx<0||idx>=size())
                throw new ArrayIndexOutOfBoundsException();
            return theItems[idx];
        }
    
        public E set(int idx,E newVal){
            if(idx<0||idx>size())
                throw new ArrayIndexOutOfBoundsException();
            E old = theItems[idx];
            theItems[idx] = newVal;
            return old;
        }
    
        public  void ensureCapacity(int newCapacity) { //数组的扩展
            if(newCapacity<theSize)
                return;
            E[] old = theItems;
            theItems = (E[])new Object[newCapacity];
            for(int i=0;i<size();i++){
                theItems[i] = old[i];
            }
        }
    
        public boolean add(E x){
            add(size(),x);
            return true;
        }
    
        public void add(int idx,E x){
            if(theItems.length == size())
                ensureCapacity(size()*2+1);
            for(int i=theSize;i>idx;i--){
                theItems[i] = theItems[i-1];
            }
            theItems[idx] = x;
            theSize++;
        }
    
        public E remove(int idx){
            E removeItem = theItems[idx];
            for(int i=idx;i<size()-1;i++){
                theItems[i] = theItems[i+1];
            }
            theSize--;
            return removeItem;
        }
    
    
        public Iterator<E> iterator() {
            return new ArrayListIterator();
        }
    
        private class ArrayListIterator implements Iterator<E>{ //内部类
            private int current = 0;
            public boolean hasNext(){
                return current<size();
            }
            public E next(){
                if(!hasNext())
                    throw new NoSuchElementException();
                return theItems[current++];
            }
            public void remove(){
                MyArrayList.this.remove(--current);
            }
        }
    }
  • 相关阅读:
    AWVS使用基础教程 什么是AWVS Acunetix Web Vulnerability Scanner(简称AWVS)是一款知名的网络漏洞扫描工具
    91家纺网,三次更新,配套数据库models
    91家纺网,三次更新,此次代码不可联通
    91家纺网,二次更新
    91家纺
    Copy_Excel_To_Excel#--此脚本用于将目标表格写入新的表格--
    Find_Excel_From_Dir获取特定目录下的excel表格,将数据复制出来
    递归解压压缩包_模块更新(需要下载对应的解压程序)
    更新的Main函数
    添加copy模块_复制Excel文件
  • 原文地址:https://www.cnblogs.com/shenlanzhizun/p/6244983.html
Copyright © 2011-2022 走看看