gpt4 book ai didi

java - 保存为 arraylist 元素的哈希表在分配给 arrayelement 后清除哈希表时会丢失值

转载 作者:行者123 更新时间:2023-12-01 17:30:55 24 4
gpt4 key购买 nike

请告知..在以下代码中(经过测试。会正常工作)

public class Exp_Test { 
public static void main (String[] args) {
ArrayList<Hashtable> objArrlistHshTbl = new ArrayList<Hashtable>();

Hashtable objHashTable = new Hashtable();

objHashTable.put("Key1", "Value1");
objHashTable.put("Key2", "Value2");

objArrlistHshTbl.add(objHashTable);

objHashTable.clear();

objHashTable.put("Key3", "Value3");
objHashTable.put("Key4", "Value4");

objArrlistHshTbl.add(objHashTable);
System.out.println("Hi");//put a breakpoint here to check the values
}
}

我期望看到一个将哈希表保存为数组元素的数组列表,第一个包含键“Key1”和“Key2”,第二个包含键“Key3”和“Key4”。我得到一个包含两个哈希表的数组列表,但哈希表内的值和键对于两个表来说都是“Key3”和“key4”。有人可以解释一下吗。如果是引用问题,如何在不创建多个哈希表的情况下将两个哈希表放入不同的数组元素(我必须在 for 循环中运行代码以添加多个哈希表。每次创建单独的哈希表听起来并不好好)

最佳答案

这句话是个大问题

objHashTable.clear();

您必须了解,在您的情况下,objHashTable 指向一个对象。当您将其添加到数组时,该数组只是创建一个指向同一对象的指针。因此,当您对任何这些指针调用clear时,它会清除该对象。这是编程中的一个基本概念。您需要创建一个 new Hashtable() 并将其添加为第二个元素。

此外,Microsoft 和大多数现代编程世界建议您远离匈牙利命名约定。查看有关该主题的一些讨论:Hungarian notation in C#

关于java - 保存为 arraylist 元素的哈希表在分配给 arrayelement 后清除哈希表时会丢失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11053298/

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