我有一个遍历复杂深层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);
}
}
答案 0 :(得分:2)
要删除所需的节点(parent
),请更改
parent = null;
到
arr.remove(parent);
将其设置为null
不会删除任何内容,只需将曾经指向该节点的引用更改为null即可。要删除,您需要使用HashMap.remove()方法