ArrayList实现

API

https://docs.oracle.com/javase/8/docs/api/
在这里插入图片描述

实现

MyList

package MyArrayList;

/**
 * @ClassName MyList
 * @Description :TODO
 * @Author Josvin
 * @Date 2021/03/08/12:34
 */
public interface MyList {
    boolean add(Integer e);
    void add(int index, Integer e);

    Integer remove(int index);
    boolean remove(Integer e);

    Integer get(int index);

    Integer set(int index, Integer e);

    boolean contains(Integer e);

    int indexOf(Integer e);

    int lastIndexOf(Integer e);

    void clear();

    int size();

    boolean isEmpty();

    MyIterator iterator();

}

MyArrayList

package MyArrayList;

import java.util.Arrays;

/**
 * @ClassName MyArrayList
 * @Description :TODO
 * @Author Josvin
 * @Date 2021/03/08/12:42
 */
public class MyArrayList implements MyList {
    private Integer[] array;
    private int size;

    public MyArrayList() {
        array = new Integer[16];
        size = 0;
    }

    //  供内部进行容量控制
    // 一旦执行后,可以保证容量肯定够用
    private void ensureCapacity() {

        if (size < array.length) {
            return;
        }
        // 进行扩容
        Integer[] newArray = new Integer[array.length * 2];
        for (int i = 0; i < array.length; i++) {
            newArray[i] = array[i];

        }
        this.array = newArray;
    }

    @Override
    public boolean add(Integer e) {
        // TODO   需要考虑扩容的情况
        ensureCapacity();
        array[size] = e;// 尾插
        size++;

        return true;
    }

    @Override
    public void add(int index, Integer e) {
        //判断合法性
        if (index < 0 || index > size()) {
            //下标不合法,抛出异常
            throw new ArrayIndexOutOfBoundsException("index:" + index + ",Size:" + size);
        }
        //  进行插入操作
        /// 1、将[index,size)所有元素向后移动一格
        for (int from = size - 1; from >= index; from--) {
            array[from + 1] = array[from];
        }
        // 2、把元素放到 index 位置
        array[index] = e;
        // 3、size 增大1
        size++;


    }

    @Override
    public Integer remove(int index) {
        Integer ans = array[index];
        //判断合法性
        if (index < 0 || index >= size()) {
            //下标不合法,抛出异常
            throw new ArrayIndexOutOfBoundsException("index:" + index + ",Size:" + size);
        }
        // 把index+1位置开始。后边的元素向前移动一格
        for (int from = index+1; from < size; from++) {
            array[from -1] = array[from];
        }
        // 由于这里是引用类型。需要将size-1位置置为null
        array[size - 1] = null;// 基本类型不需要考虑
        //size-1
        size--;
        return ans;
    }

    @Override
    public boolean remove(Integer e) {
        int i = indexOf(e);
        if (i < 0) {
            return false;
        }
        remove(i);
        return true;
    }

    @Override
    public Integer get(int index) {
        if (index < 0 || index >= size()) {
            //下标不合法,抛出异常
            throw new ArrayIndexOutOfBoundsException("index:" + index + ",Size:" + size);
        }
        return array[index];
    }

    @Override
    public Integer set(int index, Integer e) {
        if (index < 0 || index >= size()) {
            //下标不合法,抛出异常
            throw new ArrayIndexOutOfBoundsException("index:" + index + ",Size:" + size);
        }
        Integer ans = array[index];
        array[index] = e;
        return ans;
    }

    @Override
    public boolean contains(Integer e) {
        return indexOf(e) >= 0;
    }

    @Override
    public int indexOf(Integer e) {
        for (int i = 0; i < size; i++) {
            if (e.equals(array[i])) {
                return i;
            }
        }
        return -1;
    }

    @Override
    public int lastIndexOf(Integer e) {
        for (int i = size - 1; i >= 0; i--) {
            if (e.equals(array[i])) {
                return i;
            }
        }
        return -1;
    }

    @Override
    public void clear() {
        Arrays.fill(array, null);
        size = 0;
    }

    @Override
    public int size() {
        return size;
    }

    @Override
    public boolean isEmpty() {
        if (size == 0) {
            return true;
        }
        return false;
    }

    @Override
    public MyIterator iterator() {
        return new MyArrayListIterator(this);
    }

    @Override
    public String toString() {
       /* return "MyArrayList{" +
                "array=" + Arrays.toString(array) +
                ", size=" + size +
                '}';*/
        Integer[] toshow = Arrays.copyOf(array, size);
        return Arrays.toString(toshow);
    }


}

MyIterator

package MyArrayList;

/**
 * @ClassName MyIterator
 * @Description :TODO
 * @Author Josvin
 * @Date 2021/03/09/13:23
 */
public interface MyIterator {
    public boolean hasNext();

    public Integer next();
}

MyArrayListIterator

package MyArrayList;

/**
 * @ClassName MyArrayListIterator
 * @Description :TODO
 * @Author Josvin
 * @Date 2021/03/09/13:23
 */
public class MyArrayListIterator implements MyIterator {

    private MyArrayList arrayList;
    private int index;

    public MyArrayListIterator(MyArrayList arrayList) {
        this.arrayList = arrayList;
        index = 0;
    }

    @Override
    public boolean hasNext() {
        return index < arrayList.size();
    }

    @Override
    public Integer next() {
        Integer e = arrayList.get(index);
        index++;
        return e;
    }
}

Test

package MyArrayList;

/**
 * @ClassName Test
 * @Description :TODO
 * @Author Josvin
 * @Date 2021/03/08/13:39
 */
public class Test {
    public static void main(String[] args) {
        MyList myList = new MyArrayList();
        System.out.println(myList);
        myList.add(2);
        System.out.println(myList);


        MyIterator iterator = myList.iterator();
        while (iterator.hasNext()) {
            Integer e = iterator.next();
            System.out.println(e);
        }
    }

}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值