gpt4 book ai didi

Java Jung 类型转换和 getTrees()

转载 作者:行者123 更新时间:2023-12-01 05:03:56 26 4
gpt4 key购买 nike

我正在使用 Java Jung 2.01 图包进行图论中的一些分析。我的算法采用 Forest<V, E>这样我就可以转换到 DelegateForest<V,E>所以我可以使用 getTrees()获取森林组件实例的方法。我的算法是递归的,将在 getTrees() 中的每个组件上执行方法。

所以,问题是 getTrees() 的返回类型这是 Tree<V, E> 的集合由于我的算法采用 Forest<V, E> (并且在某些时候强制转换为 DelegateForest<V, E> )并且我希望在森林的每个树组件上执行我的算法,我得到一个 ClassCastException 指出我无法从 DelegateTree<V, E> 转换至DelegateForest<V, E> .

这是我的一些代码:ArrayList<Forest<String, Integer>> treeComps = new ArrayList<Forest<String, Integer>>(forest.getTrees());

第一行只是将森林的树组件存储到 ArrayList 中。

((DelegateForest)forest).removeVertex(vertexCentralities.first().getKey(), false);

此转换来 self 的算法,该算法删除树中的一个顶点,并保留该顶点的子树。这就是为什么我需要强制转换为 DelegateForest<V, E>

  1. 如何从森林中提取树木,使树木的类型为 Forest<V,E>这样我就可以向DelegateForest<V, E>求助后来没有问题吗?
  2. 我需要修改源代码吗?
  3. 还有其他想法吗?

最佳答案

您不能将 DelegateTree 转换为 DelegateForest,反之亦然,但是您可以将它们都转换为 Forest,因为它们都实现该接口(interface)。

由于您的算法采用Forest,我希望您可以使用delegateForest.getTrees()调用以下方法。由于接口(interface)上未指定两个参数 removeVertex(..., ...) 方法,最简单的解决方案可能是受到 DelegateForest 上相应代码的启发 并在本地实现。

public void doAlgorithm( Collection<Tree<K,V>> trees )
{
for ( Tree<K,V> f : tree )
{
// algorithm here - tree is a Forest, and likely a DelegateTree
removeVertex( tree );
}
}

private removeVertex( Forest forest )
{
// As per implementation in DelegateForest...
}

干杯,

关于Java Jung 类型转换和 getTrees(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12973577/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com