Java 手动反转整数的araylist

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>();

但是如果我输入一个数组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>();

    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;
}