无法创建反转arraylist的方法

时间:2014-12-05 22:34:39

标签: java arraylist

我在使用for循环尝试反转arraylist时遇到问题。这就是我所做的,但它并没有扭转数组:

import java.util.*;                                                          

class Test {                                                                 
    public static void main(String[] args) {                                 
        ArrayList<Integer> list = new ArrayList<Integer>();                  
        list.add(3);                                                         
        list.add(4);                                                         
        list.add(5);                                                         
        reverse(list);                                                       
    }                                                                        
    public static void reverse(ArrayList<Integer> list){                     
        Integer [] reverse = new Integer[list.size()];                       
        for (int i=0; i<list.size(); i++){                                   
            reverse[i] = list.get(0);                                        
            System.out.println (reverse[i]);                                 
        }                                                                    
    }                                                                        
}      

这是我预期的输出:

5
4
3

虽然这是我得到的:

$ java Test
3
3
3

4 个答案:

答案 0 :(得分:1)

public static void reverse(ArrayList<Integer> list){
        Integer [] reverse = new Integer[list.size()];
        for (int i=list.size()-1; i>=0; i--){
            reverse[i]= list.get(i);

            System.out.println (reverse[i]);
        }

    }

答案 1 :(得分:0)

如果您只想以相反的顺序打印值(这就是您正在做的事情):

public static void reverse(ArrayList<Integer> list){
    for (int i = list.size()-1; i >= 0; i--){  
        System.out.println(list.get(i));
    }
}

如果要在数组中返回反转列表:

public static Integer[] reverse(ArrayList<Integer> list) {
    Integer[] reverse = new Integer[list.size()];
    for (int i = 0; i < list.size(); i++) {
        reverse[i] = list.get(list.size()-1-i);
        System.out.println(reverse[i]);
    }
    return reverse;
}

答案 2 :(得分:0)

您反复获取list中的第一项,将其分配给数组中的新元素并进行打印。 get方法不会从列表中删除该项;它只是返回它。

从列表末尾计算索引,然后调用get

reverse[i] = list.get(list.size() - i - 1);

但是,既然您只是在将数组分配给数组时从数组中打印出值,那么该数组就没用了。您只需要打印计算索引中的值。

System.out.println(list.get(list.size() - i - 1));

答案 3 :(得分:0)

考虑使用:

Collections.reverse(list);

至于您的方法,您将list(0)的值分配给数组中的每个索引。这将在不使用额外内存的情况下反转您的列表。

public static void reverse(ArrayList<Integer> list) {
    if (list == null) return;
    int n = list.size();

    for (int i = 0; i < list.size() / 2; i++) {
        int tmp = list.get(i);
        list.set(i, list.get(n - 1 - i));
        list.set(n - 1 - i, tmp);
    }
}