存储在 ArrayList 中的数组的倒序

Reverse order of the Arrays stored in ArrayList

我正在使用 ProcessingIGeo 库,我有一个 ArrayListIVec[] 数组:

ArrayList<IVec []> v = new ArrayList<IVec[]>(); 

ArrayList I 的每个 I 都有一个 IVec [] 数组的集合,表示曲线控制点的坐标。我需要反转 IVec [] 控制点的顺序以保持与 ArrayList 相同的顺序(我正在尝试反转曲线接缝反转控制点顺序并保持曲线的原始顺序)但我无法理解这该怎么做。 谁能帮帮我?

我不会为您提供完整的解决方案,但会指导您完成它:

  • 迭代数组列表v
  • 其中的每一项 (IVec[]),

您可以使用Collections.reverse

你也可以使用栈数据结构。您可以通过 push 将元素放入堆栈来迭代要反转的集合。然后,当您真正想要使用这些元素时,您 pop 堆栈中的每个元素,这将允许您以相反的顺序遍历集合。

试试这个;

  • 创建一个 Helper method/function 接受 returns 数组。
  • 在 Helper 方法中,使用 Collections.reverse
  • return 反转数组。
  • 在循环中调用此辅助方法,如下所示:
for(int i = 0; i < OutArray.length; I++)
{ // Here get the inner Array and pass it to Helper method. 
// Add the return array to newArray List 
}
return newArrayList.

此解决方案有效:

for (int i=0; i<v.size (); i++) {  
  IVec [] vert=v.get(i); 
  for (int j=0; j<vert.length/2; j++) {
    IVec temp = vert[j];
    vert[j]=vert[vert.length -1 - j];
    vert[vert.length - 1 - j] = temp;
  }
}

这应该可行(不是最有效的方法,但很容易理解):

public static <T> void reverseElements(ArrayList<T[]> list) {   

    ArrayList<T> tempList = new ArrayList<T>();
    for(T[] arr : list) {

        tempList.clear();
        for(T t : arr)
            tempList.add(t);

        Collections.reverse(tempList);
        tempList.toArray(arr);
        arr = tempList.toArray(arr);
    }       
}