簡體   English   中英

分配為arrayelement后,保存為arraylist元素的Hashtable在清除Hashtable時會丟失值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM