写一段eclipse能运行的且 关于 泛型类的定义和使用;Collections类的使用并能够实现拓扑排序
时间: 2024-03-05 18:48:58 浏览: 66
以下是一个泛型类的定义和使用的例子,并使用 Collections 类来实现拓扑排序:
```java
import java.util.*;
public class TopologicalSort<T> {
private Map<T, List<T>> graph = new HashMap<>();
private Set<T> visited = new HashSet<>();
private Stack<T> stack = new Stack<>();
public void addEdge(T node, T neighbor) {
graph.computeIfAbsent(node, k -> new ArrayList<>()).add(neighbor);
}
public List<T> sort() {
for (T node : graph.keySet()) {
if (!visited.contains(node)) {
dfs(node);
}
}
List<T> result = new ArrayList<>();
while (!stack.isEmpty()) {
result.add(stack.pop());
}
return result;
}
private void dfs(T node) {
visited.add(node);
for (T neighbor : graph.getOrDefault(node, new ArrayList<>())) {
if (!visited.contains(neighbor)) {
dfs(neighbor);
}
}
stack.push(node);
}
public static void main(String[] args) {
TopologicalSort<String> topoSort = new TopologicalSort<>();
// 添加节点和边
topoSort.addEdge("A", "C");
topoSort.addEdge("B", "C");
topoSort.addEdge("C", "D");
topoSort.addEdge("D", "E");
topoSort.addEdge("F", "E");
topoSort.addEdge("F", "G");
// 拓扑排序
List<String> result = topoSort.sort();
System.out.println(result);
}
}
```
这个例子中,我们定义了一个泛型类 `TopologicalSort`,它使用了一个 `Map` 和一个 `Set` 来表示有向图,使用一个 `Stack` 来保存排序结果。我们可以调用 `addEdge` 方法来添加节点和边,调用 `sort` 方法来进行拓扑排序。
在 `main` 方法中,我们创建了一个 `TopologicalSort<String>` 对象,然后添加了一些节点和边,最后调用 `sort` 方法,得到了拓扑排序的结果。
运行这个程序,输出结果应该为:`[B, A, C, D, F, G, E]`。
阅读全文