2012-02-18 10 views
2

複雑な深いHashMap構造をトラバースする機能があります。私の問題は、目的のノードを見つけてそれを削除するなどのアクションを実行すると、実際にはデータ構造上で何の動作もしていないのですが、代わりにデータ構造のコピーを操作しています。私はC++のようなポインタが自分の問題を解決すると思うので、どうすればJavaでこれを行うことができますか?深いデータ構造をトラバースしてオブジェクトを削除する

コード:

private HashMap parentNode = null; 
// a complex JSON string of arrays/objects, won't list for brevity 
private String jsonString = ... 
// parses JSON string into HashMaps for objects and Object[ ]s for arrays 
private HashMap arr = (HashMap)JSON.parse(jsonString); 
// find the node with an id of 27 
HashMap parent = findNode(arr, "27"); 
// Print arr before modifying node 
System.out.println(arr); 
// modify parent in some way 
parent = null;  
// Print arr after modifying node 
System.out.println(arr); 

public HashMap findNode(HashMap map, String id) { 
    parentNode = null; 
    findNodeRecursive(map, id); 
    return parentNode; 
} 

public void findNodeRecursive(HashMap map, String id) { 
    for(Object entry : map.entrySet()){ 
     Object value = ((Map.Entry)entry).getValue(); 
     if((value instanceof String) && ((String)value).equals(id)) 
      parentNode = map; 
     else if(value instanceof HashMap) 
      findNodeRecursive((HashMap)value,id); 
     else if(value instanceof Object[]) 
      for(int i=0; i<((Object[])value).length; i++) 
       findNodeRecursive((HashMap)(((Object[])value)[i]) ,id); 
    } 
} 
+3

一般的にコピーを操作していません。期待どおりに動作しない特定のコードを持っている場合は、ここに投稿すると役立ちます。 – jacobm

+0

コードが追加されました。助けを前もって感謝します –

+0

投稿したものが有効でないので、コードの全体構造(json文字列を含まない)を実際に投稿する必要があります。検索結果で何をやっているのですか?なぜそのコピーがあると思いますか? – ardnew

答えて

2

したいノード(parent)を削除するには、nullに設定

arr.remove(parent); 

にご

parent = null; 

を変更するには、何も削除されません、ノードを指していた参照をnullに戻すだけです。削除するには、HashMap.remove()メソッドを使用して明示的に行う必要があります

関連する問題