gpt4 book ai didi

java - list.clear() 也向后工作吗?

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

一些奇怪的问题。我有一个 for 循环,它从列表中获取数字并将它们成对排列。我想要一个可以存储巴黎和绘图编号的 HashMap ,所以;

有一个列表包含:1,2,3,4,5,6,7,8for循环从这里开始,1:1和22:3和43:5和64:7和8

这就是我所创建的;

List<Integer> numbers = new List<Integer>;
HashMap<Integer, <List<Integer>> parimap = new HashMap<Integer,<List<Integer>>;

for(int i=0; i<4; i++){
int firstinpair = numbers.get(0);
int secondinpair = numbers.get(1);
numbers.remove(0); //so it won't repeat
numbers.remove(0);
int pairnumber=i+1;
temporary.add(0,firstinpair);
temporary.add(0, secondinpair);
pairmap.put(pairnumber, temporary);
}

我得到的是:

{1=[5, 2, 6, 4, 8, 3, 1, 7], 2=[5, 2, 6, 4, 8, 3, 1, 7], 3=[5, 2, 6, 4, 8, 3, 1, 7], 4=[5, 2, 6, 4, 8, 3, 1, 7]}

我尝试过这样的:

temporary.add(firstinpair);
temporary.add(secondinpair);
pairmap.put(pairnumber, temporary);
temporary.clear();

然后:

{1=[], 2=[], 3=[], 4=[]}

我不知道我做错了什么。请帮忙!

最佳答案

您的问题是您不断将相同列表对象添加到循环内的 map 中。因此,所有映射键都指向相同值(pairmap.put(pairnumber,temporary); 是这里的罪魁祸首)。

相反:在每次循环迭代期间创建一个列表临时;然后将该列表放入您的 map 中!

此外:您可能想改进您的命名。你看,temporary 并没有说明这个变量所表示的内容。然后变量名应该采用驼峰式命名,因为firstInPair 更容易阅读。

最后:从该列表中删除元素没有任何意义 - 您可以简单地使用 get(i) 进行两次调用,而不是总是获取前两个元素> 分别。我+1。在您的小示例中,这并不重要,但对于“现实世界”场景:删除 ArrayList 中的第一个元素是您可以执行的最昂贵操作这样的 list !

正如所说;你绝对不需要这样做。您的解决方案更复杂(更难阅读/理解)并且在运行时更昂贵!

关于java - list.clear() 也向后工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41547851/

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