前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >parallelStream 会导致Index 1 out of bounds for length 0?解决

parallelStream 会导致Index 1 out of bounds for length 0?解决

原创
作者头像
疯狂的KK
发布2024-01-25 14:24:40
1640
发布2024-01-25 14:24:40
举报
文章被收录于专栏:Java项目实战Java项目实战

在Java开发过程中,集合部分报错经常会引起困惑。今天我们来分享一个常见的ArrayList索引访问越界报错,了解其根本原因及解决方案。

错误提示如下:

代码语言:javascript
复制
Index 1 out of bounds for length 0

意思是试图访问数组或List中的索引1,但该数组或List的长度为0。

这通常会出现在以下场景:

  1. 初始化一个空的ArrayList,但在循环/遍历中直接尝试添加元素。
  2. 假设ArrayList长度不会变化,但没有考虑添加元素后长度会增加的情况。

举个栗子:

代码语言:javascript
复制
List<String> list = new ArrayList<>();

for(int i = 0; i < 10; i++) {
  list.add(i + ""); 
}

第一轮添加时,list长度为0,但索引默认为1,就会出现索引超出范围的问题。

原因很简单,ArrayList在添加第一个元素前,它的underlying数组长度为0。

解决方案主要有以下几种:

  1. 初始化时预留长度,给ArrayList分配更大的数组:
代码语言:javascript
复制
List<String> list = new ArrayList<>(10);
  1. 每次添加前检查list长度:
代码语言:javascript
复制
if(list.size() > i){
  list.add(i+"");
}
  1. 使用其他动态扩容的集合如LinkedList
  2. Stream API写入元素避免索引问题

总之,在集合操作中一定要注意集合长度的动态变化,以免索引访问越界问题发生。如有疑问也可以与大家分享讨论。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档