Java 存储在ArrayList中的数组的相反顺序
我正在使用Java 存储在ArrayList中的数组的相反顺序,java,arrays,arraylist,reverse,Java,Arrays,Arraylist,Reverse,我正在使用处理和IGeo库,我有一个IVec[]数组的ArrayList: ArrayList<IVec []> v = new ArrayList<IVec[]>(); ArrayList v=new ArrayList(); 对于ArrayList的每个I,I都有一组表示曲线控制点坐标的IVec[]数组。我需要反转IVec[]控制点的顺序,保持与ArrayList相同的顺序(我正在尝试反转曲线接缝反转控制点顺序并保持曲线的原始顺序),但我不知道如何执行此操作。
处理
和IGeo
库,我有一个IVec[]
数组的ArrayList
:
ArrayList<IVec []> v = new ArrayList<IVec[]>();
ArrayList v=new ArrayList();
对于ArrayList的每个I
,I都有一组表示曲线控制点坐标的IVec[]
数组。我需要反转IVec[]
控制点的顺序,保持与ArrayList相同的顺序(我正在尝试反转曲线接缝反转控制点顺序并保持曲线的原始顺序),但我不知道如何执行此操作。
有人能帮我吗?我不会为您提供完整的解决方案,但会指导您完成:
- 迭代数组列表
v
- 对于其中的每个项目(
),IVec[]
- 将数组转换为集合(例如使用)
- 用于反转列表中的项目
- 将其转换回数组
将元素推入堆栈来迭代要反转的集合。然后,当您真正想要使用元素时,您可以从堆栈中弹出每个元素,这将允许您以相反的顺序迭代集合
- 创建接受并返回数组的帮助器方法/函数
- 在Helper方法中,使用Collections.reverse
- 返回反向数组李>
- 在循环内调用此帮助器方法,如下所示:
for(int i=0;i
此解决方案正在运行:
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;
}
}
for(int i=0;i这应该有效(不是最有效的方法,但很容易理解):
publicstaticvoidreverseeelements(ArrayList列表){
ArrayList tempList=新的ArrayList();
对于(T[]arr:列表){
圣殿骑士;
对于(T:arr)
圣殿骑士。加(t);
收藏。反面(圣殿骑士);
圣殿骑士托雷(arr);
arr=圣堂武士toArray(arr);
}
}
当我尝试使用Arrays.AsList时,我得到一个错误,函数AsList(IVec[])不存在,我认为与IVec[]相关属性,但不确定。我正在尝试迭代ArrayList以使用for循环手动更改索引。@liuzm它是asList
,带有小a。感谢您的帮助!我已更正了错误,但现在无法从列表转换到列表。这篇文章应该详细介绍解决方案,而不仅仅是发布代码,并希望用户能够执行盲拷贝粘贴,获得更多理解。
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);
}
}