我想用一个PriorityQueue
对图进行拓扑排序。为简洁起见,我想使用匿名内部类作为比较器。但是,我需要访问图表g
为了确定我正在查看的节点的入度。这可能吗?
/**
* topological sort
* @param g must be a dag
*/
public static Queue<String> topoSort(DirectedGraph<String, DefaultEdge> g) {
Queue<String> result = new PriorityQueue<String>(g.vertexSet().size(),
new Comparator<String>() {
DirectedGraph<String, DefaultEdge> g;
@Override
public int compare(String arg0, String arg1) {
if (g.inDegreeOf(arg0) < g.inDegreeOf(arg1)) {
return -1;
}
if (g.inDegreeOf(arg0) > g.inDegreeOf(arg1)) {
return 1;
}
return 0;
}
});
result.addAll(g.vertexSet());
return result;
}
更正代码
/**
* topological sort
* @param g must be a dag
*/
public static Queue<String> topoSort(final DirectedGraph<String, DefaultEdge> g) {
Queue<String> result = new PriorityQueue<String>(g.vertexSet().size(),
new Comparator<String>() {
@Override
public int compare(String arg0, String arg1) {
if (g.inDegreeOf(arg0) < g.inDegreeOf(arg1)) {
return -1;
}
if (g.inDegreeOf(arg0) > g.inDegreeOf(arg1)) {
return 1;
}
return 0;
}
});
result.addAll(g.vertexSet());
return result;
}
是的,最终确定:
public static Queue<String> topoSort(final DirectedGraph<String, DefaultEdge> g) {
See 关于最终关键词的最终决定:
匿名本地类
涉及决赛的第二种情况
变量实际上是由
语言语义。在那种情况下,
Java 编译器不会让你使用
变量,除非它被声明为final。
这种情况是随着关闭而出现的,
也称为匿名本地类。
本地类只能引用本地的
变量和参数是
宣布最终。
public void doSomething(int i, int j)
{
final int n = i + j; // must be declared final
Comparator comp = new Comparator()
{
public int compare(Object left, Object right)
{
return n; // return copy of a local variable
}
};
}
此限制的原因
如果我们阐明一些观点就会变得显而易见
关于如何实施本地课程。
匿名本地类可以使用 local
变量,因为编译器
自动给班级一个
用于保存副本的私有实例字段
类使用的每个局部变量。
编译器还添加了隐藏
每个构造函数的参数
初始化这些自动创建的
私人领域。因此,本地类
实际上并没有访问本地
变量,但仅仅是它自己的私有变量
它们的副本。唯一的办法就是这个
正常工作是如果本地
变量被声明为final,因此
他们保证不会改变。
有了这个保证,
本地类确信其
变量的内部副本
准确反映当地实际情况
变量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)