复制列表而不将其链接到原始列表多次!JAVA

复制列表而不将其链接到原始列表多次!JAVA,java,arraylist,hashmap,Java,Arraylist,Hashmap,我在复制ArrayList以将其放入Hashmap时遇到问题。我有一个充满潜在资源的ArrayList。我需要为它们添加一个时间维度,通过使用HashMap实现: HashMap<Integer, ArrayList<Resource>> resourceTime = new HashMap<>(); HashMap resourceTime=newhashmap(); 现在我希望每个时间戳t都具有完全相同的ArrayList。这将在以后的程序中进行修改。

我在复制ArrayList以将其放入Hashmap时遇到问题。我有一个充满潜在资源的ArrayList。我需要为它们添加一个时间维度,通过使用HashMap实现:

HashMap<Integer, ArrayList<Resource>> resourceTime = new HashMap<>();
HashMap resourceTime=newhashmap();
现在我希望每个时间戳t都具有完全相同的
ArrayList
。这将在以后的程序中进行修改。现在的问题是,如果我用相同的原始ArrayList填充hashMap,它将保持链接到此列表。如果我修改时间戳t的HashMap,它将针对每个时间戳t进行修改

代码:

ArrayList resourceUsageList=new ArrayList();
HashMap resourceUsage=新建HashMap();
//resourcearraylist将被项或资源填充。
resourceUsageList.add(用法);
for(int t=0;t

是否有任何方法可以在不链接的情况下用相同的ArrayList填充每个时间戳t?

您可以创建列表的副本并将副本放入映射中。这可以通过以下方式完成,例如:

resourceUsage.put(t,新的ArrayList(resourceUsageList));
但是请注意,列表项仍在列表之间“共享”,即,如果列表中包含的
资源
实例被修改,则多个列表可能会受到影响。
如果
资源
是不可变的或实际上从未修改过,则这不是问题。否则,您还需要克隆资源。

您可以创建列表的副本并将副本放入地图中。这可以通过以下方式完成,例如:

resourceUsage.put(t,新的ArrayList(resourceUsageList));
但是请注意,列表项仍在列表之间“共享”,即,如果列表中包含的
资源
实例被修改,则多个列表可能会受到影响。
如果
资源
是不可变的或实际上从未修改过,则这不是问题。否则,您还需要克隆资源。

初始化ArrayList并为每个时间戳克隆它。您可以从org.apache.commons.lang.ObjectUtils使用ObjectUtils

for(int t = 0; t < TIME; t++){
    resourceUsage.put(t, (ArrayList)ObjectUtils.clone(resourceUsageList)); 
}
for(int t=0;t
初始化ArrayList并为每个时间戳克隆它。您可以从org.apache.commons.lang.ObjectUtils使用ObjectUtils

for(int t = 0; t < TIME; t++){
    resourceUsage.put(t, (ArrayList)ObjectUtils.clone(resourceUsageList)); 
}
for(int t=0;t
只需复制列表?不要将同一个实例放在该映射中<代码>resourceUsage.put(t,newArrayList())如果您需要这些内容具有相同的“默认内容”。创建一个实例,然后复制/克隆该实例。但是不要使用同一个实例。只是复制你的列表?不要将同一个实例放在地图中<代码>resourceUsage.put(t,newArrayList())如果您需要这些内容具有相同的“默认内容”。创建一个实例,然后复制/克隆该实例。但是不要使用相同的实例。添加公共apache只是为了克隆列表。。。这有一个构造函数,请参阅解决方案。添加公共apache只是为了克隆一个列表。。。这有一个构造函数,请参阅解决方案。需要修改资源实例。我创建了一个新行来替换旧行:resourceUsageList.add(usage);使用resourceUsageList.add(新资源(使用));我创建了一个新的构造函数,它复制了原始资源的元素。然而,当我修改一个实例时,它们仍然会随之改变,需要修改资源实例。我创建了一个新行来替换旧行:resourceUsageList.add(usage);使用resourceUsageList.add(新资源(使用));我创建了一个新的构造函数,它复制了原始资源的元素。然而,当我修改一个时,它们仍然会随之改变
for(int t = 0; t < TIME; t++){
    resourceUsage.put(t, (ArrayList)ObjectUtils.clone(resourceUsageList)); 
}