需要找出摆脱以下java.lang.IndexOutofBoundsException: Index: 1, Size: 0
问题的最佳方法
从代码中可以看出,该异常随时可能发生
if(tempBean.getCustomerState.equalsIgnoreCase("MD")
为假,外部for循环继续执行。这使得代码看起来像:
finalBeanOne.add(1, tempBeanOne.get(1));
但是由于finalBeanOne列表永远不会在索引0处包含元素(因为if条件在第一次迭代时为false),因此它会抛出
IndexOutofBoundsException
。解决此问题的最佳方法是什么?ArrayList<BeanOne> finalBeanOne = new ArrayList<BeanOne>();
ArrayList<BeanOne> tempBeanOne = (cast) DAO.getBeanOneList();
for(int i=0; i< tempBeanOne.size; i++ ) {
if(tempBeanOne.getCustomerState.equalsIgnoreCase("MD") {
finalBeanOne.add(i, tempBeanOne.get(i));
}
}
最佳答案
无论您检查相等性的方式如何,都将在“统一索引”处添加到新数组列表中。请记住,对于标准数组列表,在特定索引处添加类似于在该索引处进行设置,因为要求在该索引处实际存在一个元素:
public void add(int index, E element) Inserts the specified element at the specified position in this list. Shifts the element currently at that position (if any) and any subsequent elements to the right (adds one to their indices). Throws: IndexOutOfBoundsException - if the index is out of range (index > 0 || index < size())
To solve your problem, simply call add
on your 'result' list:
finalBeanOne.add(tempBeanOne.get(i));
当然,也可以通过使用增强的逻辑来提高代码效率:
List<BeanOne> finalBeanOne = new ArrayList<BeanOne>();
List<BeanOne> tempBeanOne = (List<BeanOne>) DAO.getBeanOneList();
for(BeanOne tempBean: tempBeanOne) {
if(tempBean.getCustomerState().equalsIgnoreCase("MD") {
finalBeanOne.add(tempBean);
}
}