Java ArrayList避免IndexOutOfBoundsException

use*_*963 5 java arraylist

我有一个简短的问题.

ArrayList<T> x = (1,2,3,5)

int index = 6
if (x.get(6) == null) {
    return 0;
}

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 6, Size: 4
Run Code Online (Sandbox Code Playgroud)

我怎么能避免这个?我只想检查数组中是否有索引6的内容.如果有(null)/(没有)我想返回0.

Jon*_*eet 16

只需使用列表的大小(它不是数组):

if (x.size() <= index || x.get(index) == null) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

或者,如果要检测具有非空值的有效索引,则使用:

if (index < x.size() && x.get(index) != null) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,如果表达式的第一部分检测到索引对列表无效,get不会进行调用.

请注意,"没有元素6"(因为列表没有7个元素)和"有一个元素6,但它的值为空"之间存在逻辑差异 - 在这种情况下,它可能对您不重要,但你需要明白它不同的.

  • 如果x.size()== 6则x.get(6)抛出IndexOutOfBoundsException. (2认同)