Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么要将ArrayList分配给新的ArrayList temp_Java_Arraylist - Fatal编程技术网

Java 为什么要将ArrayList分配给新的ArrayList temp

Java 为什么要将ArrayList分配给新的ArrayList temp,java,arraylist,Java,Arraylist,我正在看leetcode上排列问题的代码。例如 [1,2,3]具有以下排列: [1,2,3]、[1,3,2]、[2,1,3]、[2,3,1]、[3,1,2]和[3,2,1]。 我发现有一句话 ArrayList<Integer> temp = new ArrayList<Integer>(l); ArrayList temp=新的ArrayList(l); 我不知道为什么这里需要将“l”指定给“temp”。我试着用current.add(l)direclty,但给出了

我正在看leetcode上排列问题的代码。例如 [1,2,3]具有以下排列: [1,2,3]、[1,3,2]、[2,1,3]、[2,3,1]、[3,1,2]和[3,2,1]。 我发现有一句话

ArrayList<Integer> temp = new ArrayList<Integer>(l);
ArrayList temp=新的ArrayList(l);
我不知道为什么这里需要将“l”指定给“temp”。我试着用current.add(l)direclty,但给出了错误的答案。你能帮我吗

public class Solution {

    public ArrayList<ArrayList<Integer>> permute(int[] num) {
        ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();

        //start from an empty list
        result.add(new ArrayList<Integer>());

        for (int i = 0; i < num.length; i++) {
            //list of list in current iteration of the array num
            ArrayList<ArrayList<Integer>> current = new ArrayList<ArrayList<Integer>>();

            for (ArrayList<Integer> l : result) {
                // # of locations to insert is largest index + 1
                for (int j = 0; j < l.size()+1; j++) {
                    // + add num[i] to different locations
                    l.add(j, num[i]);
                    ArrayList<Integer> temp = new ArrayList<Integer>(l);

                    current.add(temp);

                    //System.out.println(temp);

                    // - remove num[i] add
                    l.remove(j);
                }
            }

            result = new ArrayList<ArrayList<Integer>>(current);
        }

        return result;
    }
}
公共类解决方案{
公共数组列表排列(int[]num){
ArrayList结果=新建ArrayList();
//从空列表开始
添加(新的ArrayList());
for(int i=0;i
我不知道为什么这里需要将“l”指定给“temp”

他不是——那只是:

ArrayList<Integer> temp = l;
诚然,代码是以一种非常奇怪的方式编写的-直到最后一个语句,
result
只有一个元素,因此对它进行迭代是毫无意义的-但我相信这解释了您所问的单个语句

我不知道为什么这里需要将“l”指定给“temp”

他不是——那只是:

ArrayList<Integer> temp = l;
诚然,代码是以一种非常奇怪的方式编写的-直到最后一个语句,
result
只有一个元素,因此对它进行迭代是毫无意义的-但我相信这可以解释您所询问的单个语句。

如果您这样做了

current.add(l);
您将把对
ArrayList l
的相同引用添加到
current
。因此,如果您在其中一个列表中做了一些更改,那么这两个列表都将被修改。为了避免这个问题

ArrayList<Integer> temp = new ArrayList<Integer>(l);
ArrayList temp=新的ArrayList(l);
您正在创建不同的
ArrayList
,但内容相同。因此,它们将是不同的对象(不同的引用)。

current.add(l);
您将把对
ArrayList l
的相同引用添加到
current
。因此,如果您在其中一个列表中做了一些更改,那么这两个列表都将被修改。为了避免这个问题

ArrayList<Integer> temp = new ArrayList<Integer>(l);
ArrayList temp=新的ArrayList(l);

您正在创建不同的
ArrayList
,但内容相同。因此,它们将是不同的对象(不同的引用)。

因此创建“temp”是为了避免进一步修改“l”。因此,如果没有“l.remove(j)”,我仍然可以像“current.add(l)”那样写,对吗?这就解释了“添加”方法只是将引用而不是对象复制到ArrayList中,对吗?@羌:你的评论不是很清楚,但我怀疑你现在的想法是对的。谢谢你的好意。我为此奋斗了很长时间:)呃。。。。谢谢你再次打扰你。但我遇到了一个新问题。因为“add”方法是调用对ArrayList“current”的引用“temp”。但是,在下一次迭代中。临时对象被定向到另一个新对象。这不会改变之前添加的“临时”吗?@Qiang:我不理解你的评论,但我建议你作为一个新的单独问题提问,并用一个简短但完整的例子来说明问题。因此,创建“临时”是为了避免对“l”进行进一步修改。因此,如果没有“l.remove(j)”,我仍然可以像“current.add(l)”那样写,对吗?这就解释了“添加”方法只是将引用而不是对象复制到ArrayList中,对吗?@羌:你的评论不是很清楚,但我怀疑你现在的想法是对的。谢谢你的好意。我为此奋斗了很长时间:)呃。。。。谢谢你再次打扰你。但我遇到了一个新问题。因为“add”方法是调用对ArrayList“current”的引用“temp”。但是,在下一次迭代中。临时对象被定向到另一个新对象。这是否改变了之前添加的“临时工”?@强:我不理解你的评论,但我建议你将其作为一个新的单独问题,用一个简短但完整的例子来说明问题。谢谢你的回答。我知道我在哪里犯了错误。“add”方法只是将引用而不是对象复制到ArrayList。因此,对“l”的进一步修改将影响“当前”。谢谢您的回答。我知道我在哪里犯了错误。“add”方法只是将引用而不是对象复制到ArrayList。因此,对“l”的进一步修改将影响“电流”。