请问TreeDataGrid是否提供删除某个节点及其子节点的方法,自己去遍历子节点在数据量多的时候非常慢。
树的层级高吗?如果节点多,层级高,可以用非递归的深度遍历算法,此时如果用递归算法,会特别慢。
节点多,层级不高。请问深度遍历算法是怎么实现?
关键是非递归,因为节点太多的话,递归调用栈会很庞大。可以百度 “java 深度优先遍历算法”
递归取子节点是慢,但是我层次浅,主要是好像getMutableItems().removeAll这个删除方法更慢,如果给他上万数据,要几分钟才返回。这个地方还有优化可能吗?数据不是持久话数据。不涉及数据库为啥也能这么慢。
我看了下源码,这块可能确实比较慢,从数组中删除的话,是 O(n^2) 的执行效率,我看你在英文论坛发帖了,顺便问问这块有没有办法提高。
改成了如下写法,性能提高几百倍
LinkedList linkedList= new LinkedList(bucketObjectsDl.getContainer().getMutableItems());
Iterator iter = linkedList.iterator();
while(iter.hasNext()){
if(children.contains(iter.next())){
iter.remove();
}
}
bucketObjectsDl.getContainer().getMutableItems().clear();
bucketObjectsDl.getContainer().getMutableItems().addAll(linkedList);
2 个赞
可以,你这是手动实现了 removeAll()
还是给官方团队反馈一下,优化一下吧,数据上2万就明显慢的没法用了