如何更改返回给方法的ArrayListJAVA
这就是代码:如何更改返回给方法的ArrayListJAVA,java,arraylist,methods,Java,Arraylist,Methods,这就是代码: import java.util.Arrays; import java.util.List; public class Test { public static void main(String[]args) { changeList(); System.out.println(Arrays.toString(example().toArray())); } public static void changeList(
import java.util.Arrays;
import java.util.List;
public class Test {
public static void main(String[]args) {
changeList();
System.out.println(Arrays.toString(example().toArray()));
}
public static void changeList() {
example().set(2, "Hi!");
}
public static List<String> example () {
String str = new String("word1|word2|word3|word4|word5");
return Arrays.asList(str.split("\\|"));
}
}
导入java.util.array;
导入java.util.List;
公开课考试{
公共静态void main(字符串[]args){
变更列表();
System.out.println(Arrays.toString(example().toArray());
}
公共静态无效变更列表(){
示例().set(2,“嗨!”);
}
公共静态列表示例(){
String str=新字符串(“word1 | word2 | word3 | word4 | word5”);
返回array.asList(str.split(“\\\\”);
}
}
我希望数组列表如下:[word1,word2,你好!word4,word5]
但这并没有改变。。。它打印
[word1,word2,word3,word4,word5]
甚至可以这样改变吗?
提前谢谢
但这并没有改变。。。甚至可以这样改变吗
是的,您更改了列表,但丢失了返回集合的ref,因为方法public E set(int index,E元素)
返回E,而不是列表本身。。见
正如我所说,将example()的返回移动到一个可以操作的变量中
public static void main (String[] args) {
List<String> retVal = example();
System.out.println(retVal);
retVal.set(2, "Hi!");
System.out.println(retVal);
}
public static List<String> example () {
String str = new String("word1|word2|word3|word4|word5");
return Arrays.asList(str.split("\\|"));
}
publicstaticvoidmain(字符串[]args){
List retVal=example();
System.out.println(retVal);
retVal.set(2,“嗨!”);
System.out.println(retVal);
}
公共静态列表示例(){
String str=新字符串(“word1 | word2 | word3 | word4 | word5”);
返回array.asList(str.split(“\\\\”);
}
公共静态void main(字符串[]args){
System.out.println(Arrays.toString(changeList().toArray());
}
公共静态列表变更列表(){
列表=示例();
列表。集合(2,“嗨!”);
退货清单;
}
公共静态列表示例(){
String str=新字符串(“word1 | word2 | word3 | word4 | word5”);
返回array.asList(str.split(“\\\\”);
}
问题在于,示例
每次调用时都会给出一个全新的列表
。在changeList
中创建列表时,它与在main
中创建的列表不同,对一个列表所做的更改不会影响另一个列表
解决此问题的一种方法是:
让changeList
方法按照它所说的去做:接受列表(而不是从头开始生成一个),然后更改该列表
让main
方法在List
中传递到changeList
publicstaticvoidmain(字符串[]args){
列表=示例();
变更列表(列表);
System.out.println(Arrays.toString(list.toArray());
}
公共静态无效变更列表(列表){
列表。集合(2,“嗨!”);
}
让我们一次一行地浏览您的代码,了解它在做什么:
public static void main(String[]args) {
changeList();
这将调用changeList()
方法:
public static void changeList() {
example().set(2, "Hi!");
第一次调用示例()
:
现在我们修改返回的列表
,方法是将索引2处的元素设置为“Hi!”
。但是,修改后的列表将立即被丢弃,因为您不再引用它
然后我们返回main:
System.out.println(Arrays.toString(example().toArray()));
现在我们再举一个例子:
public static List<String> example () {
String str = new String("word1|word2|word3|word4|word5");
return Arrays.asList(str.split("\\|"));
}
现在main()需要保存对changeList()
返回的列表的引用:
publicstaticvoidmain(字符串[]args){
List mainList=changeList();
系统输出打印项次(主列表);
}
(注意:您可以直接打印列表
。您的原始版本比需要的复杂得多。)将example()的返回移到一个变量中……这对我很有用。“它不会改变”是什么意思?你能提供一个完整的运行示例来说明问题吗?请给出一个完整的示例。您应该包括一个main()
方法,该方法调用这个example()
方法,然后执行您想要的任何其他操作。还要添加System.out.println()
调用并显示结果。然后解释你想让你的程序做什么不同的事情。发布完整的代码。通常情况下,设置这样的项会起作用。很明显,您缺少了引入bug的代码的关键部分。您创建了两个列表。先修改,但打印一个完全不同的。你说得对!但是我想改变这个方法中的值,因为我用了好几次这个方法…@Andy,你这是什么意思?你能用语言解释你试图解决的整个问题吗?
example().set(2, "Hi!");
System.out.println(Arrays.toString(example().toArray()));
public static List<String> example () {
String str = new String("word1|word2|word3|word4|word5");
return Arrays.asList(str.split("\\|"));
}
public static void changeList() {
List<String> theList = example();
theList.set(2, "Hi!");
return theList;
}
public static void main(String[]args) {
List<String> mainList = changeList();
System.out.println(mainList);
}