不保留内容的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));
所以我有一个递归程序,我试图在其中生成字符串的所有排列。我打算将排列存储在名为 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));