不保留内容的List列表

List of List not retaining the contents

所以我有一个递归程序,我试图在其中生成字符串的所有排列。我打算将排列存储在名为 ans 的列表列表中。

每个当前排列都存储在用于填充 ans 列表的容器列表中。我怀疑,因为列表是引用类型,所以也许我正在丢失 ans 列表中的值,因为容器列表正在被操纵?我是白痴吗



import java.util.*;
public class practice_3 {
   static String str="abc";
   static List<List<Character>> ans=new ArrayList<List<Character>>();

   
public static void permString(ArrayList container )
{
    if(container.size()==str.length())
        {System.out.println(container);
        
        ans.add(container);
        return;
        }
    
    for(int i=0;i<str.length();i++)
    {
        if(!container.contains(str.charAt(i)))
        {
            container.add(str.charAt(i));
            permString(container);
            container.remove(container.size()-1);
            
        }
            
    }
    
}
public static void main(String[] args) {
    
    ArrayList<Character> container=new ArrayList<>();
    
    
    permString(container);
    System.out.println(ans);
    System.out.println("container end="+container);
    
    
}

}

你是对的,因为容器是通过引用传递的,在 container 中点对点所做的更改也反映在 ans(集合的集合)中。

为避免这种情况,您需要在存储到 ans 集合时克隆/创建容器的新副本。这可以通过以下轻松实现。

ans.add(new ArrayList<Character>(container));