ArrayList 实现(Java)

在这里插入图片描述

迭代器接口:

public interface Iterable
{
    Iterator iterator();
}

public interface Iterator
{
    boolean hasNext();

    Integer next();

    void remove();
}

接口代码:

//int 类型的 List 实现
//int 用作下标。Integer 用于元素
public interface List extends Iterable
{
    boolean add(Integer e);
    void add(int index,Integer e);

    //根据下标删除
    Integer remove(int index);
    //删除第一个遇到的
    boolean remove(Integer element);

    Integer get(int index);
    Integer set(int dex,Integer e);

    int size();
    void clear();
    boolean isEmpty();

    boolean contains(Integer e);
    int indexOf(Integer e);
    int lastIndexOf(Integer e);
}

方法代码:

import java.util.Arrays;

public class ArrayListDemo1 implements List
{
    private int[] array;//顺序表内部数组
    private int size;   //顺序表元素个数

    @Override
    public String toString()
    {
        StringBuilder sb = new StringBuilder("[");
        for (int i = 0; i < size; i++)
        {
            sb.append(array[i]);
            if (i != size - 1)
            {
                sb.append(", ");
            }
        }
        sb.append("]");
        return sb.toString();
    }

    //90
    public ArrayListDemo1()
    {
        //初始容量为10个
        array = new int[10];
        //初始元素个数为0
        size = 0;
    }

    //10
    public ArrayListDemo1(List other)
    {
        array = new int[other.size()];
        for (int i = 0; i < other.size(); i++)
        {
            array[i] = other.get(i);
        }
        size = other.size();
    }


    @Override
    public boolean add(Integer e)
    {
        if (array.length == size)
        {
            ensureCapacity(array.length * 2);
        }
        array[size++] = e;
        return true;
    }

    public void ensureCapacity(int capacity)
    {
        if (this.array.length >= capacity)
        {
            return;
        }

        int[] newArray = new int[capacity];
        for (int i = 0; i < size; i++)
        {
            newArray[i] = this.array[i];
        }
        this.array = newArray;
    }


    @Override
    public void add(int index, Integer e)
    {
        if (index < 0 || index > size)
        {
            throw new IndexOutOfBoundsException("下标不合法:" + index);
        }

        if (array.length == size)
        {
            ensureCapacity(array.length * 2);
        }
        int i = size;
        while (i > index)
        {
            array[i] = array[i - 1];
            i--;
        }
        size++;
        array[index] = e;
    }

    @Override
    public Integer remove(int index)
    {
        if (index < 0 || index > size - 1)
        {
            throw new IndexOutOfBoundsException("下标不合法:" + index);
        }

        int e = array[index];
        int i = index + 1;
        while (i < size)
        {
            array[i - 1] = array[i];
            i++;
        }
        size--;
        return e;
    }

    @Override
    public boolean remove(Integer e)
    {
        for (int i = 0; i < size; i++)
        {
            if (array[i] == e)
            {
                remove(i);
                return true;
            }
        }
        return false;

//        int index = indexOf(e);
//        if(index != -1)
//        {
//            remove(index);
//            return true;
//        }
//        else
//        {
//            return false;
//        }
    }

    @Override
    public Integer get(int index)
    {
        if (index < 0 || index > size - 1)
        {
            throw new IndexOutOfBoundsException("下标不合法:" + index);
        }

        return array[index];
    }

    @Override
    public Integer set(int index, Integer e)
    {
        if (index < 0 || index > size - 1)
        {
            throw new IndexOutOfBoundsException("下标不合法:" + index);
        }

        Integer old = array[index];
        array[index] = e;
        return old;
    }

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

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

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

    @Override
    public boolean contains(Integer e)
    {
        return indexOf(e) != -1;
    }

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

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

    @Override
    public Iterator iterator()
    {
        return new ArrayListDemo1Iterator(this);
    }
}


测试代码:

public class ArrayListDemo1_Main
{
    public static void main(String[] args)
    {
        List list = new ArrayListDemo1();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        System.out.println("list = " + list);   //1,2,3,4
        System.out.println("size = " + list.size());//4

        list.add(0, 100);
        System.out.println("list = " + list);//100,1,2,3,4
        System.out.println("size = " + list.size());//5

        list.add(5, 200);
        System.out.println("list = " + list);//100,1,2,3,4,200
        System.out.println("size = " + list.size());//6

        try
        {
            list.add(7, 300);
        } catch (IndexOutOfBoundsException e)
        {
            System.out.println(e);
        }

        list.remove(3);
        System.out.println("list = " + list);//100,1,2,4,200
        System.out.println("size = " + list.size());//5

        try
        {
            list.remove(-1);
        } catch (IndexOutOfBoundsException e)
        {
            System.out.println(e);
        }

        try
        {
            list.remove(5);
        } catch (IndexOutOfBoundsException e)
        {
            System.out.println(e);
        }

        System.out.println(list.remove((Integer) 100));
        System.out.println("list = " + list);//1,2,4,200
        System.out.println("size = " + list.size());//4

        System.out.println(list.remove((Integer) 100));
        System.out.println("list = " + list);//1,2,4,200
        System.out.println("size = " + list.size());//4

        System.out.println(list.get(0));

        try
        {
            list.get(-1);
        } catch (IndexOutOfBoundsException e)
        {
            System.out.println(e);
        }

        System.out.println(list.set(3, 2000));
        System.out.println("list = " + list);//1,2,4,2000
        System.out.println("size = " + list.size());//4

        System.out.println(list.isEmpty());
        list.clear();
        System.out.println(list.isEmpty());

        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);
        list.add(7);
        list.add(8);
        list.add(9);
        list.add(10);

        System.out.println("list = " + list);
        System.out.println("size = " + list.size());//10

        list.add(11);
        System.out.println("list = " + list);
        System.out.println("size = " + list.size());//11

        list.add(1);
        System.out.println("list = " + list);
        System.out.println("size = " + list.size());//12
        System.out.println(list.indexOf(1));        //0
        System.out.println(list.lastIndexOf(1));//11

        System.out.println(list.indexOf(99));//-1
        System.out.println(list.lastIndexOf(99));//-1

        Iterator it = list.iterator();
        while (it.hasNext())
        {
            System.out.println(it.next());
        }
    }
}

在这里插入图片描述

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枳洛淮南✘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值