0

アドバイスしてください..次のコードで(テスト済み。正常に動作します)

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
    }
}

配列要素として保存されたハッシュテーブルの配列リストが表示されることを期待しています.1つ目はキー「Key1」と「Key2」、2つ目はキー「Key3」と「Key4」です。2 つのハッシュ テーブルを含む配列リストを取得しますが、ハッシュ テーブル内の値とキーは、両方のテーブルの 'Key3' と 'key4' として取得されます。誰か説明してくれませんか。それが参照の問題である場合、複数のハッシュ テーブルを作成せずに 2 つのハッシュ テーブルを異なる配列要素に取得するにはどうすればよいですか (複数のハッシュ テーブルを追加するには、for ループ内でコードを実行する必要があります。良い)

4

3 に答える 3

3

この行は大きなノノです

objHashTable.clear();

objHashTableあなたの場合、オブジェクトを指していることを理解する必要があります。配列に追加すると、その配列は同じオブジェクトへのポインターを作成するだけです。したがって、これらのポインターのいずれかで clear を呼び出すと、オブジェクトがクリアされます。これは、プログラミングにおいて不可欠な概念です。new Hashtable()を作成し、それを 2 番目の要素として追加する必要があります。

また、マイクロソフトと現代のプログラミング界のほとんどは、ハンガリー語の命名規則を避けることを推奨しています。トピックに関する議論のいくつかをチェックしてください: C# のハンガリー語表記法

于 2012-06-15T15:07:51.830 に答える
2

ArrayList参照によってオブジェクトを格納します。をクリアするとclear objHashTableobjArrlistHshTbl.get(0)

インデックスごとに新しい ものを作成する必要があります。HashTable

于 2012-06-15T15:06:24.040 に答える
0

解決済み

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);
              }

    }


    }
}
于 2012-06-15T15:11:35.850 に答える