基本数据结构之ArrayList
基本数据结构之ArrayList
关西大汉弹琵琶 发表于3年前
基本数据结构之ArrayList
  • 发表于 3年前
  • 阅读 20
  • 收藏 0
  • 点赞 0
  • 评论 0

移动开发云端新模式探索实践 >>>   

摘要: Java实现

问题描述: 

ArrayList


问题分析: 

基本的实现


代码实现:

package c03;

import java.util.Iterator;
import static self.util.*;
/*
*
 * @project: DataStructureAndAlgorithmAnalysis
 * @filename: MyArrayList.java
 * @version: 0.10
 * @author: Jimmy Han
 * @date: 21:40 2015/7/13
 * @comment: List implemented with Array
 * @result:
*/

public class MyArrayList<AnyType> implements Iterable<AnyType> {
    private static final int DEFAULT_CAPACITY = 10;
    private int theSize;
    private AnyType[] theItems;

    public MyArrayList(){doClear();}
    public void clear(){doClear();}
    private void doClear(){
        theSize = 0; ensureCapacity(DEFAULT_CAPACITY);
    }

    public int size(){return theSize;}
    public boolean isEmpty(){return size() == 0;}
    public void trimToSize(){ensureCapacity(size());}

    public AnyType get(int idx){
        if(idx < 0 || idx >= size())
            throw new ArrayIndexOutOfBoundsException();
        return theItems[idx];
    }

    public AnyType set(int idx, AnyType newVal){
        if(idx < 0 || idx >= size())
            throw new ArrayIndexOutOfBoundsException();
        AnyType old = theItems[idx];
        theItems[idx] = newVal;
        return old;
    }

    public void ensureCapacity(int newCapacity){
        if(newCapacity < theSize)
            return;

        AnyType[] old = theItems;
        theItems = (AnyType[]) new Object[newCapacity];
        for(int i = 0; i < size(); i++)
            theItems[i] = old[i];
    }

    public boolean add(AnyType x){
        add(size(), x);
        return true;
    }

    public void add(int idx, AnyType 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 AnyType remove(int idx){
        AnyType removeItem = theItems[idx];
        for(int i = idx; i < size() - 1; i++)
            theItems[i] = theItems[i + 1];
        theSize--;
        return removeItem;
    }

    public Iterator<AnyType> iterator() {
        return new ArrayListIterator();
    }

    private class ArrayListIterator implements java.util.Iterator<AnyType>{
        private int current = 0;

        public boolean hasNext(){
            return current < size();
        }

        public AnyType next(){
            if(!hasNext())
                throw new java.util.NoSuchElementException();
            return theItems[current++];
        }

        public void remove(){
            MyArrayList.this.remove(--current);
        }
    }

    public static void main(String[] args) {
        MyArrayList<String> marr = new MyArrayList<String>();
        marr.add("www");
        marr.add("bw");
        marr.add(".com");
        marr.add("s");
        marr.remove(3);
        marr.add(".cn");

        self.util.printIterator(marr.iterator());

        System.out.println(marr.get(2));
        System.out.println(marr.set(1,"hello"));

       self.util.printIterator(marr.iterator());

    }
}


  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 7
博文 40
码字总数 14221
×
关西大汉弹琵琶
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: