如何从List的指定索引位置开始反向遍历得到符合预期顺序的新列表
问题原因分析
- 初始循环值错误:你以
newPlayerList.size()作为j的初始值,第一次取模后得到索引0,直接跳过了目标起始位置maxIndex - 遍历方向和终止条件不符合需求:现有循环只会遍历从列表末尾到
maxIndex区间的元素,无法实现从maxIndex反向走到列表头后,继续从列表末尾往前补全剩余元素的逻辑
正确实现方案
你的需求本质是从指定索引开始,逆时针(反向)循环遍历整个列表,可以按以下逻辑实现:
int size = newPlayerList.size(); // 一共取size个元素,遍历完整个列表 for(int i = 0; i < size; i++) { // 计算当前要取的索引:加size是为了避免负数,再模size得到合法索引 int currentIndex = (maxIndex - i + size) % size; newPlayerList2.add(newPlayerList.get(currentIndex)); }
用你给出的示例验证:列表[4,5,8,7],maxIndex=2,size=4
- i=0:
(2-0+4)%4=2→ 取元素8 - i=1:
(2-1+4)%4=1→ 取元素5 - i=2:
(2-2+4)%4=0→ 取元素4 - i=3:
(2-3+4)%4=3→ 取元素7
最终得到的列表就是[8,5,4,7],完全符合预期。
内容的提问来源于stack exchange,提问作者smarty_pants
相关产品推荐
相关产品推荐

