如何解决如何从 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);
}
这是我的第一个回答,如果我不够清楚,请提出任何问题!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。