0

calls は arrayList で、customerCalls は hashMap です。私はEclipseを使用してデバッグしていましたが、calls.clearがcustomerCalls Hashmapにすでに挿入されているarrayListオブジェクトをクリアしていることに気づきました。オブジェクトが別のデータ構造に送信されると、それは独立したエンティティを持ち、それを含むこのデータ構造にアクセスしない限り、そのオブジェクトに対して操作を実行できないと思ったので、私は混乱しています。

arrayList 呼び出しをクリアして、別のコントラクト専用の新しい一連の呼び出しを解放し、後でハッシュマップ キー (コントラクト番号) の値として挿入する必要があります。クリアしないと、現在の反復の追加が過去の反復の追加に追加されるため、すべての呼び出しが累積されます。

>     if (callContractID.equals(currentContractID)==false){
>                               customerCalls.put(currentContractID, calls);
>                               currentContractID =  callContractID;
>                               calls.clear();
>                               calls.add(call);
>                               count++;
>     }
     else {

        calls.add(call);
         }
4

3 に答える 3

2

オブジェクトが別のデータ構造に送信されると、それは独立したエンティティを持ち、それを含むこのデータ構造にアクセスしない限り、そのオブジェクトに対して操作を実行できないと思ったので、私は混乱しています。

いいえ、マップにはオブジェクトへの参照が含まれています...別の変数を単に割り当てたかのように。同じオブジェクトへの参照を多数持つことができ、1 つの参照を介して行われた変更は、他の参照を介して表示されます。非常に簡単な例として:

StringBuilder b1 = new StringBuilder();
StringBuilder b2 = b1;
b2.append("foo");
System.out.println(b1); // Prints foo

コレクションでもまったく同じことが起こります。

StringBuilder b1 = new StringBuilder();
List<StringBuilder> list = new List<StringBuilder>();
list.add(b1);

StringBuilder b2 = list.get(0);
// Now b1 and b2 are both reference to the same object...
b2.append("foo");
System.out.println(b1); // Prints foo
于 2013-09-30T20:15:11.153 に答える