gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:13:08 25 4
gpt4 key购买 nike

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

HashMap<Integer, ArrayList<Resource>> resourceTime = new HashMap<>();

现在我希望每个时间戳 t 具有完全相同的 ArrayList<Resource> 。这将在稍后的程序中进行修改。现在的问题是,如果我用相同的原始 ArrayList 填充 hashMap,它仍然链接到该列表。如果我修改时间戳 t 的 HashMap,它将针对每个时间戳 t 进行修改。

代码:

ArrayList<Resource> resourceUsageList = new ArrayList<>();
HashMap<Integer, ArrayList<Resource>> resourceUsage = new HashMap<>();

//The resourcearraylist gets filled with items or resources.

resourceUsageList.add(usage);

for(int t = 0; t < TIME; t++){

resourceUsage.put(t, resourceUsageList);
}

有什么方法可以用相同的 ArrayList 填充每个时间戳 t 而无需链接它们吗?

最佳答案

您可以创建列表的副本并将副本放入 map 中。这可以通过 ArrayList copy constructor 来完成,例如:

resourceUsage.put(t, new ArrayList<>(resourceUsageList));

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

关于java - 复制列表而不将其多次链接到原始列表! java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49668625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com