我在使用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
答案 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);
}
}