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);
            }
        }
    }
  • 相关阅读:
    windows7触屏编程
    改变窗口大小,恢复以前的大小
    insert()
    index()
    help()
    id()
    extend()
    count()
    cmp()
    append()
  • 原文地址:https://www.cnblogs.com/shenlanzhizun/p/6244983.html
Copyright © 2011-2022 走看看