2012-01-23 9 views
1

は、[ユーザマップ[LibraryMap [ブックマップ]] JavaのTreeMapのネストされた、明確な消去すべてのデータが新しい間、私は、ネストされたのTreeMapを使用していない

私はBookMap.clear()の代わりに新しいのを使用

が、それはすべてのデータおよびIをクリアブックマップに最後に入力した2つのデータが残っています。新しいオブジェクトを作成する必要はありますか?私は最初のBookMapを追加した後、LibraryMapには影響しないことを明確にしましたが、それはそうでした。あなたの LibraryMapに入れている何

TreeMap<Integer, Integer> BookMap = new TreeMap<Integer, Integer>(); 
    TreeMap<Integer, TreeMap<Integer, Integer>> LibraryMap = new TreeMap<Integer, TreeMap<Integer, Integer>>(); 
    TreeMap<Integer, TreeMap<Integer, TreeMap<Integer, Integer>>> UserMap = new TreeMap<Integer, TreeMap<Integer, TreeMap<Integer, Integer>>>(); 


    // Adding data to a tree map 
    BookMap.put(1, 2000); 
    BookMap.put(2, 2000); 
    BookMap.put(3, 2003); 

    LibraryMap.put(1,BookMap); 
    //BookMap.clear(); 
    BookMap = new TreeMap<Integer, Integer>(); 
    BookMap.put(4, 2006); 
    BookMap.put(5, 2007); 

    LibraryMap.put(2,BookMap); 

    BookMap= new TreeMap<Integer, Integer>(); 
    BookMap.put(6,2009); 
    BookMap.put(7, 2012); 

    LibraryMap.put(3,BookMap); 

    UserMap.put(1,LibraryMap); 

答えて

0

新しいブックマップをライブラリマップの新しいキーに関連付けるには、新しいブックマップを作成する必要があります。

clearを使用すると、変数BookMapは引き続きLibraryMapのキー1に関連付けられたインスタンスへの参照です。言い換えれば:ところで

LibraryMap.put(1,BookMap); 
BookMap.clear(); //still the same instance as 1-line above 
BookMap.put(4, 2006); // still the same 
BookMap.put(5, 2007); // ... 
LibraryMap.put(2,BookMap); // LibraryMap.get(1) and .get(2) will return the same instance 

、関係のない、しかし、変数名の大文字を使用することは間違っている:慣例では、変数(ブックマップ)のためのクラスとlowcaseのための大文字です。

0

BookMapへの参照である、あなたはBookMapを変更しないLibraryMapによって参照したい場合はそうです、あなたがnew BookMapを作成する必要があります。

0

はい、新しいオブジェクトを作成する必要があります。これをクリアすると、すべてのLibraryMapsに同じオブジェクトが追加されます。

あなたはこの

BookMap = new TreeMap<Integer, ....; 

を行うと、新しいTreeMapのインスタンスを作成し、それにブックマップという名前の変数を指しています。

0

Map(または一般的にJava)は、オブジェクトに参照/ポインタを格納するためです。したがって、そのオブジェクトを操作すると、そのオブジェクトを保持するコンテナも影響を受けます。

関連する問題