public void removeNodeByEncodedName(TreeNodeTop[] toDelete) { for (TreeNodeTop top : toDelete) { String name = top.getName().substring(7); List<TreeNodeImpl> lst = root.childs.get(name); if (lst != null) { Iterator<TreeNodeImpl> iterator = lst.iterator(); while (iterator.hasNext()) { TreeNodeTop n = (TreeNodeTop) iterator.next(); if (n.getName().equals(top.getName()) && n.owner.filePath.equals(top.owner.filePath)) { n.dispose(); iterator.remove(); } } // todo -- do we need "remove" above and "put" below if lst.size()> 0 if (lst.size() == 0) { root.childs.remove(name); } } } }