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);
}
}
一般的にコピーを操作していません。期待どおりに動作しない特定のコードを持っている場合は、ここに投稿すると役立ちます。 – jacobm
コードが追加されました。助けを前もって感謝します –
投稿したものが有効でないので、コードの全体構造(json文字列を含まない)を実際に投稿する必要があります。検索結果で何をやっているのですか?なぜそのコピーがあると思いますか? – ardnew