当前位置:  开发笔记 > 编程语言 > 正文

设置抛出IndexOutOfBoundsException的ArrayList的方法

如何解决《设置抛出IndexOutOfBoundsException的ArrayList的方法》经验,为你挑选了2个好方法。

在处理时ArrayList,我发现在使用构造函数设置了数组的初始大小之后initialCapacity,set()尽管创建了数组,但是使用将抛出异常,但是未正确设置大小.

使用ensureCapacity()将无法工作,因为它基于elementData数组而不是size.

还有其他副作用静态的,因为DEFAULT_CAPACITYensureCapacity().

使这项工作的唯一方法是在使用构造函数后使用add()尽可能多的时间.

请检查以下代码.

import java.util.ArrayList;
import java.util.List;

public class Test {

public static void main(String[] args) {

    List test = new ArrayList(10);
    test.set(5, "test");
    System.out.println(test.size());
}

我不确定为什么java会抛出这个异常.

我期望的行为:test.size()应该返回10并且设置(5,...)应该工作.

实际:抛出异常IndexOutOfBoundsException.

那么导致问题的set方法是什么?



1> Eran..:

test.set(5, "test");抛出此异常的语句,因为您ArrayList的空是空的(如果你有这个语句size()就会返回0),如果它没有包含值,你就不能设置第i个元素.您必须添加至少6个元素,你ArrayList为了test.set(5, "test");有效.

new ArrayList(10)不会创建ArrayList其大小为10.它创建一个空,ArrayList其初始容量为10.


@ShowStopper什么没有正确解释?除非您使用的构造函数使用另一个Collection的元素初始化ArrayList,否则ArrayList将初始化为0长度,而不管其初始容量如何.

2> Tunaki..:

该异常没有被抛出test.size(),但通过test.set(5, "test");.这是因为您在索引5处设置元素,但列表当前为空.

List test = new ArrayList(10);

不会创建使用10个null元素初始化的列表.它创建一个初始容量为10个元素的列表,即支持数组的大小为10,但列表本身仍为空.

如果要初始化包含10个null元素的列表,可以使用

List list = new ArrayList<>(Collections.nCopies(10, null));

作为旁注,您不应该使用类似的原始类型,List但总是更喜欢参数化列表.

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有