Java中ArrayList添加元素的时候可否乱序添加
List<E>list=newArrayList<E>();比如new了一个ArrayList,现在希望不是直接用add顺序加入元素,而是乱序,比如先在100的位置加入一...
List<E> list = new ArrayList<E>();比如new了一个ArrayList,现在希望不是直接用add顺序加入元素,而是乱序,比如先在100的位置加入一个元素。可是即使我new的时候申请了足够的空间也会报溢出错误。请问怎样解决,或者其他什么数据类型可以这样乱序的添加。
展开
4个回答
展开全部
ArrayList有现成方法的,
add
public void add(int index,
E element)将指定的元素插入此列表中的指定位置。向右移动当前位于该位置的元素(如果有)以及所有后续元素(将其索引加 1)。
指定者:
接口 List<E> 中的 add
覆盖:
类 AbstractList<E> 中的 add
参数:
index - 指定元素所插入位置的索引。
element - 要插入的元素。
抛出:
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())。
追问
抛出:
IndexOutOfBoundsException - 如果索引超出范围 (index size())。 就是这个,我new的时候size是0 而index>0。我用add(index, element)的时候就会报错,即使初始化的时候new ArrayList(200)比如这样 也还是会报错
追答
我看了一下ArrayList源代码, 原因在于构造方法里面,就算你指定了new ArrayList(200),但是Arraylist的size仍然为0,
所以index =100的时候,size仍然为0,所以会导IndexOutOfBoundsException
总结一下,对于ArrayList,当且仅当在list自身size范围内,也就是已经实实在在分配了内存后才能对已经存在的数组元素进行add
建议你直接用数组来实现
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个顺序问题你可以用Set啊,那东西没有顺序的。
如果一定要用list,可以用add(int index, E element)
方法。在list.size()的范围内,生成一个随机值就行了。
如果一定要用list,可以用add(int index, E element)
方法。在list.size()的范围内,生成一个随机值就行了。
追问
其实本来是应该有顺序的,但是我是从map里面取出来再存到ArrayList里面的,所以取的时候顺序乱了,现在想按照原来的存往list里面,用add和set都是会报错的,边界溢出~
追答
map怎么会有顺序的?
如果你用Map的key部分, 用
Set keySet()
得到内容就行了,关键看你的Map的实现类了, 如果实现类是TreeMap,那保存Key的Set还是有顺序的。
如果你用value内容,
Collection values()
这个方法就直接得到了。没必要像你那样,一个个的取出来存进去的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
ArrayList又不是数组.. ArrayList只有在添加新数据的时候才会分配内存
所以你说那功能貌似实现不了..而且.这有啥意义??
直接用数组不是更好??
所以你说那功能貌似实现不了..而且.这有啥意义??
直接用数组不是更好??
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询