将一个数组列表替换为其他列表

use*_*951 0 java collections list arraylist

在我的业务逻辑中,我想用另一个列表完全替换一个列表.

以下方法是否正确?

public class TestListReplacement {

    public static void main(String[] args) {

        List<String> values= new ArrayList<String>();
        values.add("a");
        values.add("b");
        values.add("c");
        values.add("d");
        values.add("e");
        values.add("f");

        List<String> valuesNew= new ArrayList<String>();
        valuesNew.add("g");
        valuesNew.add("h");
        valuesNew.add("i");
        valuesNew.add("j");
        valuesNew.add("k");

        values= valuesNew;
        for(String val:values){
            System.out.println(val);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常,但我想知道,在某些用例中,它可能无法正常工作.

Wil*_*fun 5

如果我理解你正在尝试做什么,那么

values.clear(); // delete original contents in the list
values.addAll(valuesNew); // insert everything in the new list
Run Code Online (Sandbox Code Playgroud)

从@nbrooks和其他人的答案中添加更多的上下文:覆盖引用并不总是一个选项,坦率地说,在集合中迭代两次的低效率几乎总是在实践中无关紧要.如果您需要保留相同的列表实例(因为它在代码中的其他位置被引用),则覆盖变量不会更新其他位置.