【问题标题】:Reverse an ArrayList in Java, 4 elements at a time在Java中反转一个ArrayList,一次4个元素
【发布时间】:2026-01-24 22:35:02
【问题描述】:

我有一个 20 个整数的 ArrayList,它实际上代表 5 组 4 个数字,如下所示:

1 5 9  13 17
2 6 10 14 18
3 7 11 15 19
4 8 12 16 20

我想把它翻转成这样:

4 8 12 16 20
3 7 11 15 19
2 6 10 14 18
1 5 9  13 17

我已经看到有关如何反转整个列表的其他答案,但是我将如何遍历这个 20 个列表,反转前 4 个,然后是下一个 4,等等?我无法完全围绕完成它需要做的数学运算。

谢谢。

【问题讨论】:

  • 到目前为止你尝试了什么?
  • Lists 是水平运行还是垂直运行?这是List<List<Integer>>吗?
  • @ifly6 它是垂直运行的,第一个示例中给出的数字表示列表中元素的位置,然后在第二个示例中我希望它们翻转到的位置。它不是一个列表,只是一个列表。
  • 将其拆分为列表列表,每个子列表有 4 个索引。循环遍历它们并反转每个子列表。
  • 永远不要将更多信息放入 cmets;而是更新您的问题!下一次:请花一些时间在帮助中心,以更好地了解如何提出合理的问题。仅仅降低要求是不够的!

标签: java list arraylist reverse reorderlist


【解决方案1】:

试试这个(伪代码):

List list

int nbrElements = list.size() / 4 // number of elements, each containing 4 numbers

int index1 = 0
int index2 = nbrElements-1

while index1 < index2
    for i in {0,1,2,3} // for each number in element
        switch(index1*4+i, index2*4+i) // define a method to switch numbers
    index1++
    index2--

【讨论】:

  • 如果list.size() % 4 != 0怎么办?
  • 好点。 @James 列表的大小总是可以被 4 整除吗?如果不是,您将如何对它们进行排序?
【解决方案2】:

你可以使用以下逻辑

     List<Integer> al= Arrays.asList(1, 5, 9,  13, 17,
            2, 6, 10, 14, 18,
            3, 7, 11, 15, 19,
            4, 8, 12, 16, 20);

    int setSize=5,listSize=al.size();
    for(int i=listSize-setSize;i>=0;i-=setSize){
        //Instead of printing you can add the sublist to a new list
        System.out.println(al.subList(i, i+setSize));
    }

它产生以下输出

[4, 8, 12, 16, 20]
[3, 7, 11, 15, 19]
[2, 6, 10, 14, 18]
[1, 5, 9, 13, 17]

【讨论】: