有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    如果您只想按相反的顺序打印值(看起来是这样的):

    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. # 2 楼答案

    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]);
            }
    
        }
    
  3. # 3 楼答案

    考虑使用:

    Collections.reverse(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);
        }
    }
    
  4. # 4 楼答案

    重复获取list中的第一项,将其分配给数组中的新元素,然后打印它。get方法不会从列表中删除该项;它只是退回它

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

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

    但是,由于您只是在将数组中的值分配给数组后立即打印该值,因此该数组是无用的。只需打印计算索引中的值

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