数组索引在集合中出界,怎么样?

时间:2016-01-25 12:12:21

标签: java arraylist collections

我正在处理集合,我正在尝试撤消列表并收到错误:

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);

谁能告诉我问题的原因? 请告诉我它是如何导致问题以及如何解决这个问题的.. 感谢。

1 个答案:

答案 0 :(得分:2)

您的temp列表为空,因此使用任何索引调用该列表上的get都会引发IndexOutOfBoundsException例外。

我假设您打算使用原始列表的元素初始化temp

因此,改变

List<E> temp = new ArrayList<E>();

List<E> temp = new ArrayList<E>(list);

正如Keppil评论的那样,您的循环范围也应该得到纠正,因为list.size()不是Listsize()元素中的有效索引。

更改

for (int i = 0; i <= list.size(); i++)

for (int i = 0; i < list.size(); i++)