手动反转整数的arraylist

时间:2012-11-03 00:19:41

标签: java

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

但如果我输入一个数组1,2,3,4,5,6,7,8,9,10 结果是10,9,8,7,6,5,4,3,2,10

我的错误在哪里?

4 个答案:

答案 0 :(得分:4)

实际上,你在那里工作得很好。但是你可以通过迭代'向后'来简化你的for循环:

for(int i = n.size() - 1 ; i >= 0 ; i--)
    result.add(n.get(i));

哦,还有一件事我应该提一下。声明列表result时,您可能希望指定其容量,因为您知道它的内容。即:

ArrayList<Integer> result = new ArrayList<Integer>(n.size());

答案 1 :(得分:3)

使用n.size() / 2交换(尽可能少)并以线性时间运行。

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

答案 2 :(得分:0)

  

Collections.reverse(ArrayList的);

如果您仍想参加手册,

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

答案 3 :(得分:0)

它不适用于包含偶数项目的列表