Java 手动反转整数的araylist
但是如果我输入一个数组1,2,3,4,5,6,7,8,9,10 结果是10,9,8,7,6,5,4,3,2,10 我的错在哪里 Collections.reversearrayList 如果你还想用手动的Java 手动反转整数的araylist,java,Java,但是如果我输入一个数组1,2,3,4,5,6,7,8,9,10 结果是10,9,8,7,6,5,4,3,2,10 我的错在哪里 Collections.reversearrayList 如果你还想用手动的 public static ArrayList<Integer> reverse (ArrayList<Integer> n) { ArrayList<Integer> result = new ArrayList<Integer>();
public static ArrayList<Integer> reverse (ArrayList<Integer> n) {
ArrayList<Integer> result = new ArrayList<Integer>();
for(int i = 0; i < n.size(); i++) {
int j = n.size() - i - 1;
result.add(i, n.get(j));
}
return result;
}
事实上,你那里的东西很好用。但您可以通过“向后”迭代来简化for循环:
public ArrayList<Integer> reverse(ArrayList<Integer> arrayList) {
ArrayList<Integer> result = (ArrayList<Integer>)list.clone();
for (int start=0,end=result.size()-1;start<end;start++,end--) {
swap(result,start,end) ;
}
return result;
}
public void swap(ArrayList<Integer> temp, int front, int back) {
Integer i = temp.set(front,temp.get(back)) ;
temp.set(back, i) ;
}
哦,还有一件事我应该提一下。声明列表结果时,可能需要指定其容量,因为您知道它将是什么。i、 e:
for(int i = n.size() - 1 ; i >= 0 ; i--)
result.add(n.get(i));
使用n.size/2交换尽可能少,并以线性时间运行
ArrayList<Integer> result = new ArrayList<Integer>(n.size());
它不适用于项目数为偶数的列表这可能是我见过的反转arraylist最低效的方法。@Wug那么它有什么低效的呢?@1000:在任意索引处插入数组列表处于启用状态,因此,该算法已启用^2@ThousandRe:Wug的评论:使用addelement一个参数而不是2是O1摊销,但在末尾添加元素。重构for循环将允许这样做,并使程序速度快很多倍。对不起,他是否提到要手动执行此操作?我的解决方案会出错吗?我不会投你的反对票,因为你的解决方案在各个方面都比滚回家要好。知道如何反转数组并不会带来任何好处。任何人都知道怎么做,如果你不知道的话,你会像石头一样笨。一旦你做到了这一点,写代码就浪费了时间,因为它是一个已经有很多形状和大小的轮子。这个答案唯一的错误是它不是询问者想要的。@a.R.s.:OP的方法就是这样做的,是的。但是修改arraylist可能也一样好。如果这还不够好,可以使用otherN=reversen.clone;我输入1,2,3,4,5,6,7,8,9,10,输出是10,9,8,7,6,5,4,3,2,10@user1795732是否意外地在末尾打印了一个0?我用这个例子运行了你的代码以进行双重检查,结果正如预期的那样。这个方法很有趣,但你确定它比在列表中循环更快吗?由于每次迭代执行2个set操作,因此使用本机数组肯定会更有效。对ArrayList的包装访问会有一些损失。是的,我想这是有道理的。不管怎么说,+1来自我。
public static ArrayList<Integer> reverse (ArrayList<Integer> n)
{
for (int i = 0, j = n.size() - 1, t; i <= size / 2; ++i, --j)
{
t = n.get(i);
n.set(i, n.get(j));
n.set(j, t);
}
return n;
}