Java list.clear()是否也在反向工作?

Java list.clear()是否也在反向工作?,java,list,for-loop,hashmap,Java,List,For Loop,Hashmap,一些奇怪的问题。 我有一个for循环,它从列表中提取数字并成对排列。我想要一个能存储巴黎和图纸编号的哈希图,所以 有一个列表包含:1,2,3,4,5,6,7,8 for循环从这里开始, 1:1和2 2:3和4 3:5和6 4:7和8 这就是我创造的 List<Integer> numbers = new List<Integer>; HashMap<Integer, <List<Integer>> parimap = new HashMap&

一些奇怪的问题。 我有一个for循环,它从列表中提取数字并成对排列。我想要一个能存储巴黎和图纸编号的哈希图,所以

有一个列表包含:1,2,3,4,5,6,7,8 for循环从这里开始, 1:1和2 2:3和4 3:5和6 4: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);
}
我试过这样做:

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

{1=[], 2=[], 3=[], 4=[]}
我不知道我做错了什么。
请帮忙

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

相反:在每个循环迭代期间创建一个新的列表
临时
;然后把这个列表放到你的地图上

此外:您可能希望改进您的命名。你看,
temporary
没有说明这个变量所表示的东西。然后变量名应该是CAMELLCASE,因为firstInPair更容易阅读

最后:从该列表中删除元素没有任何意义-您可以使用
get(i)
resp执行两个调用,而不是总是获取前两个元素。i+1。在您的小示例中,这并不重要,但对于“真实世界”场景来说:删除ArrayList中的第一个元素是您可以对此类列表执行的最昂贵的操作


如前所述;你绝对不需要那样做。您的解决方案在运行时更复杂(更难阅读/理解),而且更昂贵

在重复添加对该列表的引用时,只能创建一个列表。我建议为您要添加的地图的每个值创建一个列表。感谢您的快速接受!你能为我的补充问题提供更多帮助吗(请看你回答下面的评论)。谢谢!谢谢它完全有效!关于命名:这只是一个问题。我必须用我的语言替换名字,以使每个人都能理解。但是谢谢你的好提示!无论如何,我仍然无法理解为什么列表中包含使用.clear()方法删除的元素??问题是:您正在显示的源代码。。。有点不完整。如果你真的对解决这个难题感兴趣,第一步是拿出一个真正的作品来展示这个问题。您当前拥有的代码。。。甚至连一个清除循环的电话都没有!抱歉,我的意思是,为什么在列表上的.clear()之后,hashmap中的相同列表为空?正如所说:当您多次添加相同的列表时,您将得到相同的列表。这就是为什么你需要不同的列表;然后你再也不能“清除”任何东西了。
{1=[], 2=[], 3=[], 4=[]}