如何从void方法(Java)更改LinkedList



这看起来很简单,但我不太明白为什么不起作用。

我想反转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);
}

这是我的第一个答案,所以如果我不够清楚,请问任何问题!

相关内容

  • 没有找到相关文章

最新更新