我有2个列表,根据参数,我从2个列表中的1个中删除了一个元素。然后我遍历列表以进行其他处理。但是,即使列表丢失了1个元素,list.size()
仍然相同,导致java.lang.IndexOutOfBoundsException
。我能做些什么来解决这个问题吗?
System.out.println(high_list_price.size());
if(first_hit.equals("low")){
high_list_date.remove(high_list_date.size()-1);
high_list_price.remove(0);
high_list_percent.remove(0);
}
if(first_hit.equals("high")){
low_list_date.remove(low_list_date.size()-1);
low_list_price.remove(0);
low_list_percent.remove(0);
}
System.out.println(high_list_price.size());
for(int tt = 0;tt < low_list_date.size();tt++){
System.out.println(low_list_date.get(tt)+"|"+low_list_price.get(tt));
}
for(int ii = 0; ii < high_list_date.size();ii++){
System.out.print(high_list_date.get(ii)+"|");
System.out.println(+high_list_price.get(ii));
}
.remove之前和之后high_list_price.size()= 51,但是high_list_date.size()从51变为50,为什么会这样?
答案 0 :(得分:2)
如果向后遍历ArrayLists,则可以删除当前元素,而不必担心后面会发生什么 另一种选择是迭代,制作要删除的内容列表,然后从原始列表中删除这些元素。
答案 1 :(得分:1)
作为@ z5h提供的有效选项的补充,请考虑使用Iterator
接口,其中包含remove()
方法,该方法从基础集合中删除项目而不会导致各种问题使用Collection.remove()
原因。
使用Iterator
可能会帮助您以更易读的方式浏览您的馆藏。
答案 2 :(得分:0)
您可能希望使用ArrayList而不是普通数组。它提供了其他功能,如remove(Object o)