Java中ArrayList内的HashMap获得覆盖
来源:爱站网时间:2021-09-16编辑:网友分享
假设我有一个字符串“ abca”。我想使用Java中的HashMap和ArrayList跟踪每个索引中每个字母的出现。例如,如果a = 0,b = 1,c = 2,我希望输出如下:for ...
问题描述
假设我有一个字符串"abca"
。我想使用Java中的HashMap和ArrayList跟踪每个索引中每个字母的出现。例如,如果a = 0,b = 1,c = 2,我希望输出如下:输入:abca
[{0=1},{0=1, 1=1},{0=1, 1=1, 2=1},{0=2, 1=1, 2=1}];
我已经用Java编写了此解决方案:
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String x = in.next();
char a[] = x.toCharArray();
HashMap hm = new HashMap();
ArrayList> list = new ArrayList();
for(int i=0;i
但是我得到的输出为:
[{0=2, 1=1, 2=1}, {0=2, 1=1, 2=1}, {0=2, 1=1, 2=1}, {0=2, 1=1, 2=1}]
在迭代结束时,ArrayList正在更新HashMap的最后阶段的所有索引。
解决方法:
原始地图在每次迭代中都会发生变异,因此,要解决此问题,您需要创建一个新的HashMap
并在每次迭代中添加它。
list.add(new HashMap(hm));
输出:
[[{0 = 1},{0 = 1,1 = 1},{0 = 1,1 = 1,2 = 1},{0 = 2,1 = 1,2 = 1}]