JAVA ArrayList add() 方法报错

ArrayList<Integer>al=newArrayList<Integer>();al.ensureCapacity(100);al.add(2,2);报错Exc... ArrayList<Integer> al = new ArrayList<Integer>();
al.ensureCapacity(100);
al.add(2,2);
报错
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 0
我是想在2这个位置上插入,add(int index, E element):Inserts the specified element at the specified position in this list.
这个方法的意思不是说在指定的位置上插入,难道必须要顺序插入?
展开
 我来答
百度网友ef10e91
推荐于2016-10-12 · TA获得超过1822个赞
知道大有可为答主
回答量:1223
采纳率:50%
帮助的人:1288万
展开全部
直接看API就好,注意最后一句:IndexOutOfBoundsException - 如果索引超出范围 (index < 0 || index > size())
add
public void add(int index,
E element)将指定的元素插入此列表中的指定位置。向右移动当前位于该位置的元素(如果有)以及所有后续元素(将其索引加 1)。

指定者:
接口 List<E> 中的 add
覆盖:
类 AbstractList<E> 中的 add
参数:
index - 指定元素所插入位置的索引
element - 要插入的元素
抛出:
IndexOutOfBoundsException - 如果索引超出范围 (index < 0 || index > size())

补充------------------------
在指定位置上插入并不是顺序插入的意思呀
比如 1 2 3 4 5 6
现在有6个数,我可以在第三个位置插入一个数7,这样就变成:1 2 7 3 4 5 6
但是我不能在第100个上位置插入,因为目前没有那个位置,你不可能在那插入。
假设可以这样插入的话,在100这个位置插入后,就要将容量扩充至至少100,虽然中间都是null,但是内存也要分配。同样的你还得提防着是不是有人要在10万、100万这个位置插入数字呢?这样说的话,内存迟早要爆掉了……
所以只能在已经被分配了的位置上插入数据,而不能人工的去先插入再要求分配内存空间。
ThinkIBM
推荐于2018-04-06 · TA获得超过5289个赞
知道大有可为答主
回答量:3263
采纳率:0%
帮助的人:5447万
展开全部
那当然,比如排除打饭,明明没人排队,你非要说,我要插队,插到第2个位置
这不是胡闹嘛

插入的位置,必须是数组里已经存在的位置
否则就会报错。

al.add(2,2);
的意思是在数组的第2个元素位置插入元素
你的这个数组刚刚创建,一个元素都没有,当然报错

你如果是要加入两个2,应该是这样:
al.add(2);
al.add(2);
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阿飞18
2010-08-30 · 超过11用户采纳过TA的回答
知道答主
回答量:33
采纳率:0%
帮助的人:0
展开全部
看过ArrayList的源码你会发现add(int index, E element)方法中第一个语句是
if(index > size || index < 0)//size为当前ArrayList.size();
throw new IndexOutOfBoundsException("Index: "+index+", Size: "+size);
所以你的代码中al.add(2,2);会报异常。因为al.size()还为0.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
沧海沉砂
2010-09-08
知道答主
回答量:24
采纳率:0%
帮助的人:10万
展开全部
回答的已经很好了,看看源码,学习最快啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式