如何从 void 方法更改 LinkedList (Java)
How can I change a LinkedList from a void method (Java)
这看起来很简单,但我不太明白为什么它不起作用。
我想反转我的 LinkedList 中的元素,我有一个工作方法,但我不能 return 值,因为我的教授希望它是一个无效的方法。我该怎么做?
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 class 中,它确实反转了列表,但没有 return 值(因为它是无效的)但我不知道如何在 ReverseTester 中设置 employeeName class.
我知道这可能非常简单,但我一生都无法弄清楚,非常感谢任何帮助。
清空并重新填充现有列表,而不是替换它。
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 对象通过引用存储,因此您不需要 return 来自 ListUtil::reverse 的任何内容。在函数中对对象所做的任何更改都将反映在 ReverseTester.java 中。发生这种情况是因为非原始 Java 对象是通过引用存储的。基本上,您的代码完全按照您的意愿行事。您创建一个 LinkedList,用项目填充它,然后反转这些项目。
不过 System.out.println(employeeNames);
你会遇到问题。因为那只会打印对象的正式名称而不是它的内容。如果你想在 Java 中打印列表的内容,你可以这样做:
for (String name : employeeNames) {
System.out.println(t);
}
这是我的第一个回答,如果我不够清楚,请提出任何问题!
这看起来很简单,但我不太明白为什么它不起作用。
我想反转我的 LinkedList 中的元素,我有一个工作方法,但我不能 return 值,因为我的教授希望它是一个无效的方法。我该怎么做?
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 class 中,它确实反转了列表,但没有 return 值(因为它是无效的)但我不知道如何在 ReverseTester 中设置 employeeName class.
我知道这可能非常简单,但我一生都无法弄清楚,非常感谢任何帮助。
清空并重新填充现有列表,而不是替换它。
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 对象通过引用存储,因此您不需要 return 来自 ListUtil::reverse 的任何内容。在函数中对对象所做的任何更改都将反映在 ReverseTester.java 中。发生这种情况是因为非原始 Java 对象是通过引用存储的。基本上,您的代码完全按照您的意愿行事。您创建一个 LinkedList,用项目填充它,然后反转这些项目。
不过 System.out.println(employeeNames);
你会遇到问题。因为那只会打印对象的正式名称而不是它的内容。如果你想在 Java 中打印列表的内容,你可以这样做:
for (String name : employeeNames) {
System.out.println(t);
}
这是我的第一个回答,如果我不够清楚,请提出任何问题!