2.2 数组列表

文章介绍了ArrayList作为Java中常用的动态数组,它的主要优点在于按索引访问快速,但头部删除效率低。ArrayList内部实现基于数组,添加元素时自动扩容,删除元素时可能涉及大量元素移动。建议使用官方库中的实现,如Java的ArrayList类。
摘要由CSDN通过智能技术生成

​@[toc]
emsp;emsp;对于java程序员来说,数组列表可能是用得最多的了,对于年限比较高的程序员来说,ArrayList都写吐了,哈哈。数组列表的出现是为了克服链表的一些缺点而诞生的。链表这个数据结构虽然好用,但是也存在一个最重要的缺点,就是按索引访问比较慢,需要按照引用或者指针去循环检索。为此,才有了数组列表。数组列表内部实现是一个数组,内部有个字段记录最后一个元素所在的数组索引。添加元素直接在在这个位置后添加。当数组满了的时候就对数组进行扩容。
emsp;emsp;扩容的方法是长度加一然后翻倍。
emsp;emsp;但是数组列表,也有缺点,就是从头部删除,需要将所有元素前移,性能十分低下。
emsp;emsp; 其数据字段如下图:
在这里插入图片描述
emsp;emsp; 数组列表代码比链表简单,我这里贴一下Java代码:

public class ArrayList<T> {

    private Object[] data = new Object[0];
    private int index;

    public void addLast(T value) {
        ensureCapacity();
        data[index++] = value;
    }


    public T removeLast() {
        return (T) data[index--];
    }

    public void addFirst(T value) {
        ensureCapacity();
        System.arraycopy(data, 0, data, 1, index);
        data[0] = value;
        index++;
    }

    public T removeFirst() {
        T temp = (T) data[0];
        System.arraycopy(data, 1, data, 0, data.length - 1);
        index--;
        return temp;
    }

    public T get(int index) {
        return (T) data[index];
    }

    private void ensureCapacity() {
        if (index >= data.length) {
            Object[] array = new Object[(data.length + 1) << 1];
            System.arraycopy(data, 0, array, 0, data.length);
            data = array;
        }
    }
}

emsp;emsp;同样,对于数组列表,不建议自己实现,而是建议使用各个语言官方库里的实现。比如java有ArrayList实现。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

醒过来摸鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值