gpt4 book ai didi

java - 将 ArrayList 存储在 HashMap 中

转载 作者:行者123 更新时间:2023-11-29 03:02:02 25 4
gpt4 key购买 nike

我有以下代码。我想要做的是使用排列函数填充一个 ArrayList,将该数组保存在 HashMap 中,然后重新开始该过程(基本上为每个键用 ArrayList 填充 HashMap)。我在下面发布了代码,但是它不起作用。我认为这是因为它存储了对我声明的列表的相同引用,而不是复制它。我是 C 擦洗和 Java 新手,所以任何帮助表示赞赏!

public class Anagrams 
{
public static HashMap<String, ArrayList<String>> permutacii = new HashMap<String, ArrayList<String>>();
public static ArrayList<String> tempList = new ArrayList<String>();


private static void permutation(String prefix, String str)
{
int n = str.length();
if (n == 0)
tempList.add(prefix);
else
{
for (int i = 0; i < n; i++)
permutation(prefix + str.charAt(i),
str.substring(0, i) + str.substring(i+1));
}
}

public static void main(String[] args) {
findAll(System.in);
}

public static void findAll(InputStream inputStream)
{
Scanner scanner = new Scanner(inputStream);
while(scanner.hasNextLine())
{
String line = scanner.nextLine();
permutation("", line);
permutacii.put(line, tempList);
tempList.clear();
}
}
}

最佳答案

您只有一个列表,您在 HashMap 中存储多个引用。然后在每次迭代结束时清除该列表。

解决问题的一种可能方法:

while(scanner.hasNextLine())
{
String line = scanner.nextLine();
tempList = new ArrayList<String>();
permutation("", line);
permutacii.put(line, tempList);
}

尽管我认为如果将 tempList 设为局部变量并将其作为参数传递给 permutation 方法,代码会更具可读性:

while(scanner.hasNextLine())
{
String line = scanner.nextLine();
ArrayList<String> tempList = new ArrayList<String>();
permutation("", line, tempList);
permutacii.put(line, tempList);
}

并相应地修改排列:

private static void permutation(String prefix, String str, ArrayList<String> tempList)
{
int n = str.length();
if (n == 0)
tempList.add(prefix);
else
{
for (int i = 0; i < n; i++)
permutation(prefix + str.charAt(i),
str.substring(0, i) + str.substring(i+1),
tempList);
}
}

关于java - 将 ArrayList 存储在 HashMap 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34231628/

25 4 0