Java 查找给定ArrayList的所有可能置换<;字符串>;,并将它们存储在全局变量中

Java 查找给定ArrayList的所有可能置换<;字符串>;,并将它们存储在全局变量中,java,arraylist,global-variables,hashset,recursive-backtracking,Java,Arraylist,Global Variables,Hashset,Recursive Backtracking,在下面给出的代码中,我在函数permute中添加了ArrayList的特定排列,但在main函数中打印时,不会打印所有可能的排列。相反,相同的ArrayList会被打印出来!n是给定数组列表的长度的次数 我正在将set(我的全局变量)中的排列添加到permute函数中作为set。添加(名称),但在main函数中打印时,它会将输出作为同一个未安排的排列列表 import java.util.*; 公开课Q1{ 静态集合=新的HashSet(); 公共静态void main(字符串参数[]){ in

在下面给出的代码中,我在函数
permute
中添加了
ArrayList
的特定排列,但在
main
函数中打印时,不会打印所有可能的排列。相反,相同的
ArrayList
会被打印出来!n是给定
数组列表的长度的次数

我正在将
set
(我的全局变量)中的排列添加到
permute
函数中作为
set。添加(名称)
,但在
main
函数中打印时,它会将输出作为同一个未安排的排列列表

import java.util.*;
公开课Q1{
静态集合=新的HashSet();
公共静态void main(字符串参数[]){
int n;
扫描仪输入=新扫描仪(系统输入);
n=in.nextInt();
ArrayList name=新的ArrayList();

对于(int i=0;i您正在将同一对象的
名称
重复添加到
集合
。但是您需要添加
名称的副本

        set.add((ArrayList<String>)names);
set.add((ArrayList)名称);

set.add(新数组列表(名称));
        set.add(new ArrayList<>(names));