这看起来很简单,但我不太明白为什么不起作用。
我想反转LinkedList中的元素,我有一个工作方法,但我不能返回值,因为我的教授希望它是一个void方法。我该怎么做?
import java.util.LinkedList;
public class ListUtil {
public static void reverse(LinkedList<String> strings) {
LinkedList<String> reverseLinkedList = new LinkedList<>();
for(int i = strings.size() - 1; i >= 0; i--) {
reverseLinkedList.add(strings.get(i));
}
strings = reverseLinkedList;
System.out.println(strings);
}
}
import java.util.LinkedList;
public class ReverseTester {
public static void main(String[] args) {
LinkedList<String> employeeNames = new LinkedList<>();
employeeNames.addLast("Dick");
employeeNames.addLast("Harry");
employeeNames.addLast("Romeo");
employeeNames.addLast("Tom");
ListUtil.reverse(employeeNames);
System.out.println(employeeNames);
System.out.println("Expected: [Tom, Romeo, Harry, Dick]");
}
}
在我的ListUtil类中,它确实反转了列表,但没有返回值(因为它是空的(,但我不知道如何在ReverseTester类中设置employeeName。
我知道这可能非常简单,但我一辈子都没能弄清楚这一点,非常感谢任何帮助。
清空并重新填充现有列表,而不是替换它。
public static void reverse(LinkedList<String> strings) {
List<String> temp = new ArrayList<>(strings); // Copy the contents of the original list. Pass the original list to constructor of our duplicate list.
strings.clear(); // Empty the original list.
for (String e : temp)
strings.addFirst(e); // Refill the original list using elements from our duplicate list.
}
或者只是
public static void reverse(LinkedList<String> strings) {
Collections.reverse(strings);
}
非基元Java对象是通过引用存储的,因此不需要从ListUtil::reverse返回任何内容。对函数中对象所做的任何更改都将反映在ReverseTester.java中。这是因为非原始java对象也是通过引用存储的。基本上,您的代码完全按照您的意愿执行。您创建一个LinkedList,用项填充它,然后反转这些项。
不过,System.out.println(employeeNames);
会有问题。因为这只是打印对象的正式名称,而不是它的内容。如果你想用Java打印列表的内容,你可以这样做:
for (String name : employeeNames) {
System.out.println(t);
}
这是我的第一个答案,所以如果我不够清楚,请问任何问题!