java:ArrayList 方法add报错:ArrayIndexOutOfBoundsException: 1
声明一个ArrayList变量config_cont,初始长度10,在调用config_cont.add(map)添加第10个元素时报错,0--8没有报错:ArrayIn...
声明一个 ArrayList 变量config_cont,初始长度10,在调用config_cont.add(map)添加第10个元素时报错,0--8没有报错:
ArrayIndexOutOfBoundsException: 1
ArrayList自动变长,怎么还会出错呢??
资料:在每一种add()方法中,都首先调用了一个ensureCapacity(int miniCapacity)方法,这个方法保证elementData数组的长度不小于miniCapacity。ArrayList的自动变长机制就是在这个方法中实现的。
import java.util.ArrayList;
import java.util.Iterator;
import java.util.HashMap;
import java.io.*;
ArrayList config_cont;
config_cont = new ArrayList();
public void init() {
String fieldspath="D:/login.properties";
try{
FileReader ffield=new FileReader(fieldspath);
BufferedReader fieldbuff=new BufferedReader(ffield);
String fieldline=fieldbuff.readLine();
while(fieldline!=null){
if (!fieldline.trim().equalsIgnoreCase("")){
if (!fieldline.substring(0,1).equalsIgnoreCase("#")){
String[] fieldlinestr = fieldline.split("=");
HashMap map = new HashMap();
map.put("name", fieldlinestr[0].toUpperCase());
map.put("value", fieldlinestr[1]);
this.config_cont.add(map);
}
}
fieldline=fieldbuff.readLine();
}
fieldbuff.close();
ffield.close();
}
catch (IOException e){
throw new RuntimeException("init出错!"+fieldspath);
}
} 展开
ArrayIndexOutOfBoundsException: 1
ArrayList自动变长,怎么还会出错呢??
资料:在每一种add()方法中,都首先调用了一个ensureCapacity(int miniCapacity)方法,这个方法保证elementData数组的长度不小于miniCapacity。ArrayList的自动变长机制就是在这个方法中实现的。
import java.util.ArrayList;
import java.util.Iterator;
import java.util.HashMap;
import java.io.*;
ArrayList config_cont;
config_cont = new ArrayList();
public void init() {
String fieldspath="D:/login.properties";
try{
FileReader ffield=new FileReader(fieldspath);
BufferedReader fieldbuff=new BufferedReader(ffield);
String fieldline=fieldbuff.readLine();
while(fieldline!=null){
if (!fieldline.trim().equalsIgnoreCase("")){
if (!fieldline.substring(0,1).equalsIgnoreCase("#")){
String[] fieldlinestr = fieldline.split("=");
HashMap map = new HashMap();
map.put("name", fieldlinestr[0].toUpperCase());
map.put("value", fieldlinestr[1]);
this.config_cont.add(map);
}
}
fieldline=fieldbuff.readLine();
}
fieldbuff.close();
ffield.close();
}
catch (IOException e){
throw new RuntimeException("init出错!"+fieldspath);
}
} 展开
4个回答
2008-11-05
展开全部
你的问题不在于ArrayList,而在于下面4句程序中.
String[] fieldlinestr = fieldline.split("=");
HashMap map = new HashMap();
map.put("name", fieldlinestr[0].toUpperCase());
map.put("value", fieldlinestr[1]);
当 fieldline不是这种形式的时候: name=value(也就是没有等号的时候),
以上代码就会抛出异常,因为split()后得到的 fieldlinestr 的长度只有1,
那么你调用map.put("value", fieldlinestr[1]); 就会出ArrayIndexOutOfBoundsException: 1 这种异常
简单的办法是在HashMap map = new HashMap();上面加入一个fieldlinestr数组长度的判断.
String[] fieldlinestr = fieldline.split("=");
HashMap map = new HashMap();
map.put("name", fieldlinestr[0].toUpperCase());
map.put("value", fieldlinestr[1]);
当 fieldline不是这种形式的时候: name=value(也就是没有等号的时候),
以上代码就会抛出异常,因为split()后得到的 fieldlinestr 的长度只有1,
那么你调用map.put("value", fieldlinestr[1]); 就会出ArrayIndexOutOfBoundsException: 1 这种异常
简单的办法是在HashMap map = new HashMap();上面加入一个fieldlinestr数组长度的判断.
展开全部
ArrayList是自动增长的,不可能出现数组越界的情况。应该是别的地方问题,代码帖出来。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
ArrayList不是自动增长的。自增的类大都有个增长参数,可以设置当使用率达到多少是增长。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
代码贴出来
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询