Java ArrayList——为什么使用add方法添加新元素而不使用set方法添加?

 

目录

ArrayLIst简介

ArrayList API

为什么使用add方法添加新元素而不使用set方法添加?


ArrayLIst简介

ArrayList就是动态数组,就是数组的复杂版本,相比于数组,它提供了动态的增加和减少元素。不过也有一些缺点,使用get和set方法实现访问或改变数组元素的草走,而不能使用[]愈发格式

ArrayList API

ArrayList<T>():默认构造函数,构造一个空数组列表

ArrayList<T>(int initialCapacity):用指定容量构造一个空数组列表

bollean add(T obj):在数组列表的尾端添加一个元素。永远返回true

int size():返回存储在数组列表中的当前元素数量。(这个值将小于或等于数组列表的容量,这个值就是数组实际存储的元素的个数,而不是capacity)

void ensureCapacity(int capacity):确保数组列表在不重新分配存储空间的情况下就能保存给定数量的元素。简单来说,就是在使用数组钱,能够估计出来数组可能存储的元素数量,那么我们就可以提前为数组分配好空间大小。

void trimToSize():将数组列表的存储容量消减到当前size大小的尺寸。一般当你确定当前数组不会再添加任何元素的时候调用。

E set (int index,T obj): 返回数组索引为index的值,并设置数组索引为index的新值为obj。

void T get(int index):返回数组索引为index的值。

T get(int index):获得指定元素的位置(必须介于0~sie()-1之间)

T remove(int index):删除一个元素,并将后面的元素向前移动。被删除的元素由返回值返回。

 

这里只是列举了一些常用的方法,全部方法也并没有列出,本文主要介绍为什么使用add方法为数组添加新元素,而不使用set方法。

为什么使用add方法添加新元素而不使用set方法添加?

这里其实是我当时的一个纠结点,我在想,既然array空间都给我分配好了,我直接set值为什么不可以?直到我看了源码之后,才发现两个函数根本就不是一个东西,添加新元素只能有add,不能用set

这里就直接放set方法的源码了。

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
    ...    
    private void rangeCheck(int index) {
        if (index >= size)
            throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
    }

    public E set(int index, E element) {
        rangeCheck(index);

        E oldValue = elementData(index);
        elementData[index] = element;
        return oldValue;
    }
    ...

其实,我觉得当我贴出源码之后,都不需要解释了~~

反正,通过代码再解释一遍,当ArrayList没有存放任何内容时,size值是为0的,使用set方法自热会抛异常,亦或者从我们的set方法来说,调用set方法,会返回原来未初始化的旧值,程序也会出错。

所以使用add方法添加新元素而不使用set方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值