TreeDataGrid是否有删除某个节点及子节点的方法

请问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() :smile:

还是给官方团队反馈一下,优化一下吧,数据上2万就明显慢的没法用了