ArrayList的实现

ArrayList泛型类的实现。
内部类实现方式源码:

package main.java.arraydemo;

import java.util.Iterator;

/**
 * DateTime: 2016/11/4 09:42
 * 功能:实现ArrayList泛型类的实现:
 *       MyArrayList将保持基础数组,数组的容量,以及存储在MyArrayList中的当前项数;
 *       MyArrayList将提供一个机制以改变数组的容量,通过获得一个新的suzuki,将老数组拷贝到新数组中改变数组的容量,允许虚拟机回收老数组;
 *       MyArrayList将提供get和set的实现;
 *       MyArrayList将提供基本的方法,如size isEmpty clear remove add ;
 *       MyArrayList将提供一个实现Iterator接口的类,这个类将存储迭代序列中的下一项的下标,并提供next hasNext remove等方法的实现;
 */
public class MyArrayList<T> implements Iterable<T> {

    //默认数组容量大小
    private static final int DEFAULT_CAPACITY=10;

    //当前容量大小
    private int size;

    //数组
    private T[] items;

    //默认构造函数
    public MyArrayList(){
        init();
    }

    //初始化
    private void init(){
        size=0;
        ensureCapacity(DEFAULT_CAPACITY);
    }

    //清除
    public void clear(){
        init();
    }

    //返回size
    public int size(){
        return this.size;
    }

    //是否为空
    public boolean isEmpty(){
        return 0==size();
    }

    //收缩数组大小
    public void trimToSize(){
        ensureCapacity(size());
    }

    //获取指定下标的元素
    public T get(int index){
        if(0>index || size()< index){
            throw  new ArrayIndexOutOfBoundsException("数组下标越界");
        }
        return items[index];
    }

    //设置指定下标的元素,并返回旧的元素
    public T set(int index, T value){
        if(0>index || size()< index){
            throw  new ArrayIndexOutOfBoundsException("数组下标越界");
        }
        T oldValue=items[index];
        items[index]=value;
        return oldValue;
    }

    //自动扩容或收缩数组
    public void ensureCapacity(int newCapacity){
        if(newCapacity < this.size){
            return;
        }
        T[] oldArr=this.items;
        items= (T[]) new Object[newCapacity];
        for ( int i = 0; i < size(); i++ ) {
            items[i]=oldArr[i];
        }
    }

    //新增元素
    public boolean add(T value){
        try {
            add(size(),value);
            return true;
        }catch ( Exception e ){
            e.printStackTrace();
        }
         return false;
    }

    //新增元素
    private void add(int index,T value){
        if(items.length==size()){
            ensureCapacity(size()*2+1);
        }
        for ( int i = size; i > index; i-- ) {
            items[i]=items[i-1];
        }
        items[index]=value;
        size++;
    }

    //删除元素
    public T remove(int index){
        T oldValue=items[index];
        for ( int i = index; i < size()-1; i++ ) {
            items[i]=items[i+1];
        }
        size--;
        return oldValue;
    }

    //迭代器方法的实现
    @Override
    public Iterator<T> iterator() {
        return new ArrayListIterator();
    }

    //迭代器类
    private class ArrayListIterator implements Iterator<T>{

        //当前下标
        private int current=0;

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

        @Override
        public T next() {
            if(!hasNext())
                throw new java.util.NoSuchElementException();
            return items[current++];
        }

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

}

测试:

package test.java;

import main.java.arraydemo.MyArrayList;

import java.util.Iterator;

/**
 * DateTime: 2016/11/4 10:24
 * 功能:
 * 思路:
 */


public class MyArrayListTest {
    public static void main(String[] args) {
        MyArrayList arrayList=new MyArrayList();
        System.out.println("//增加测试");
        arrayList.add(1);
        arrayList.add(2);
        arrayList.add(3);
        arrayList.add(4);

        System.out.println("//迭代器测试");
        Iterator iterator=arrayList.iterator();
        while ( iterator.hasNext()  ){
            System.out.println(iterator.next());
        }

        System.out.println(" //设置测试");
        arrayList.set(2,200);
        System.out.println("//获取测试");
        System.out.println(arrayList.get(2));
        System.out.println(" //删除测试");
        arrayList.remove(1);
        Iterator iterator1=arrayList.iterator();
        while ( iterator1.hasNext()  ){
            System.out.println(iterator1.next());
        }

    }

}

结果:
这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值