[英]Hashtable saved as an arraylist element loses values on clearing the Hashtable after assignment in to arrayelement
請指教。在下面的代碼中(已測試。將可以正常工作)
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
}
}
我希望看到一個將Hashtables保存為數組元素的arraylist,第一個帶有鍵“ Key1”和“ Key2”,第二個帶有鍵“ Key3”和“ Key4”。 我得到了帶有兩個哈希表的數組列表,但是哈希表中的值和鍵對於這兩個表都是'Key3'和'key4'。 有人可以解釋。 如果這是一個參考問題,如何在創建多個哈希表的同時將兩個哈希表放入不同的數組元素中(我必須在for循環中運行代碼以添加多個哈希表。每次聽起來都不創建單獨的哈希表好)
這條線是一個很大的諾諾
objHashTable.clear();
您必須了解您的案例中的objHashTable
指向一個對象。 當您將其添加到數組時,該數組只會創建一個指向同一對象的指針。 因此,當您在任何這些指針上調用clear時,它將清除該對象。 這是編程中的基本概念。 您需要創建一個new Hashtable()
並將其添加為第二個元素。
此外,Microsoft和大多數現代編程世界都建議您遠離匈牙利命名約定。 查看有關以下主題的一些討論: C#中的匈牙利表示法
ArrayList
通過引用存儲對象。 clear
objHashTable
,將清除objArrlistHshTbl.get(0)
。
您需要為每個索引創建一個新的 HashTable
。
解決了
public static void main (String[] args) {
ArrayList<Hashtable> objArrlistHshTbl = new ArrayList<Hashtable>();
for(int i= 1; i< 3; i++){
if(i == 1){
Hashtable objHashTable = new Hashtable();
objHashTable.put("Key" + i, "Value1");
objHashTable.put("Key" + i+1, "Value2");
objArrlistHshTbl.add(objHashTable);
}else{
Hashtable objHashTable = new Hashtable();
objHashTable.put("Key" + i, "Value3");
objHashTable.put("Key" + i+1, "Value4");
objArrlistHshTbl.add(objHashTable);
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.