如何更改返回给方法的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);
    }