我正在处理集合,我正在尝试撤消列表并收到错误:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 6, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at com.java.commonMethods.CommonClass.rev(CommonClass.java:22)
at com.java.commonMethods.CommonClass.reverse(CommonClass.java:27)
at com.java.commonMethods.CallToCommonMethods.callToCount(CallToCommonMethods.java:24)
at com.java.commonMethods.CallToCommonMethods.main(CallToCommonMethods.java:42)
你可以检查我用来反转的代码:
public static <E> void rev(List<E> list) {
List<E> temp = new ArrayList<E>();
for (int i = 0; i <= list.size(); i++) {
list.set(i, temp.get(list.size() - i - 1));
}
}
public static void reverse(List<?> list) {
rev(list);
}
这就是电话:
List<Integer> listInteger = Arrays.asList(0,1,2,3,4,5);
CommonClass.rev(listInteger);
System.out.println(listInteger);
谁能告诉我问题的原因? 请告诉我它是如何导致问题以及如何解决这个问题的.. 感谢。
答案 0 :(得分:2)
您的temp
列表为空,因此使用任何索引调用该列表上的get
都会引发IndexOutOfBoundsException
例外。
我假设您打算使用原始列表的元素初始化temp
。
因此,改变
List<E> temp = new ArrayList<E>();
到
List<E> temp = new ArrayList<E>(list);
正如Keppil评论的那样,您的循环范围也应该得到纠正,因为list.size()
不是List
个size()
元素中的有效索引。
更改
for (int i = 0; i <= list.size(); i++)
到
for (int i = 0; i < list.size(); i++)