该方法应该反转列表中项目的顺序
public class ZrcalnaSlikaSeznama {
public static <T> List<T> zrcalnaSlika(List<T> seznam) {
int length = seznam.size();
List<T> seznam2 = new ArrayList<>();
for (T x : seznam){
seznam2.add(length-1, x);
length--;
}
return seznam2;
}
}
但它抛出 IndexOutOfBoundsException
. 为什么?如何修正这个方法?
2条答案
按热度按时间c90pui9n1#
解释
您的代码的主要问题是,您假设可以直接将某些内容添加到
ArrayList
,使用add(index, element)
.但它不是一个数组,而是一个列表。这是不可能的。这个
add
方法不允许添加超出其当前大小的内容,当前大小仍为0
. 如本方法文件所述:抛出:
IndexOutOfBoundsException
-如果索引超出范围(index < 0 || index > size())
###修复要修复代码并继续使用这种方法,首先必须确保列表已经具有所需的大小,方法是在其前面填充垃圾数据,比如大量垃圾数据
null
s。然后做你想做的事,但是用set
,不是add
(否则您不会更改现有条目,而是将它们四处移动)。比如说:合适的解决方案
显然,首先用垃圾数据填充列表并不是一种理想的方法。你可以做得更好。不如向前添加到新列表中,但向后迭代原始项。所以如果你有
[1, 2, 3]
你加上,3
,2
最后呢1
. 这很容易做到:注意
还有其他的方法,java也已经有了内置的方法,如果你可以选择的话。
Collections.reverse(list)
.例如,请参阅如何在java中获取列表的反向列表视图?
ttvkxqim2#
使用for-loop()反转列表中项目顺序的另一种方法是: