ArrayList中的迷惑行为

当我准备利用ArrayList的add(index,element)方法时遇到一个郁闷的结果。
废话不多说,show time
我现在需要满足一个需求,就是希望利用arrayList可以将本来的无序的元素添加到对应的index下

//初始化数组
ArrayList<String> arrayList = new ArrayList<>(5);
arrayList.add(3,"hello");

执行后:
java.lang.IndexOutOfBoundsException: Index: 3, Size: 0

at java.util.ArrayList.rangeCheckForAdd(ArrayList.java:665)
at java.util.ArrayList.add(ArrayList.java:477)
at com.venustech.ingest.service.dao.DataIngestDaoTest.test1(DataIngestDaoTest.java:29)

ArrayList初始化源码在这里插入图片描述
add 方法前的校验

因为初始化的 arrayList 对象时,只初始化elementData内容,但是size没有修改对应大小,因为这个size只的是 elementData包含多少个数据,那就给elementData里面添加点东西吧,这样我就可以使用add(index,element)方法了

ArrayList<String> arrayList = new ArrayList<>(5);
        for (int i = 0; i < 5; i++) {
            arrayList.add("");
        }
        arrayList.add(3,"hello");
        System.out.println(arrayList);
        System.out.println(arrayList.size());

执行后的结果是
[, , , hello, , ]
6
迷惑脸
长度还给我自动变长了??
上源码

public void add(int index, E element) {
        rangeCheckForAdd(index);

        ensureCapacityInternal(size + 1);  // Increments modCount!!
        System.arraycopy(elementData, index, elementData, index + 1,
                         size - index);
        elementData[index] = element;
        size++;
    }

这里面size累加了,
但是为什么添加到对应的位置,我却要再copy一份呢?直接调用elementData[index]=element 不就好了么??
如果换成数组

public void test1() {
        String[] strs = new String[5];
        strs[3]="hello";
        System.out.println(strs.length);
        System.out.println(strs[3]);
    }

执行结果:
5
hello
是的,这才是正确的操作方式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值