在计算机科学中,图是一种非常重要的数据结构,广泛应用于社交网络、路径规划、推荐系统等领域。而Java边列表(也常被称为邻接表)是图的一种高效且常用的存储方式。本教程将手把手带你理解并实现Java邻接表,即使你是编程小白也能轻松上手!

边列表(Edge List)和邻接表(Adjacency List)虽然名称相似,但在实际使用中,邻接表更为常见。邻接表通过为图中的每个顶点维护一个“邻居列表”来表示图的连接关系。
例如,对于一个有向图:
其邻接表表示为:
A: [B, C]B: [C]C: []
相比于邻接矩阵,邻接表在存储稀疏图(即边数远小于顶点数平方的图)时更加节省空间。同时,它便于遍历某个顶点的所有邻接点,非常适合用于实现Java图算法如深度优先搜索(DFS)、广度优先搜索(BFS)等。
在Java中,我们可以使用 HashMap 和 ArrayList 来构建邻接表。下面是一个完整的示例:
import java.util.*;public class Graph { // 使用 HashMap 存储每个顶点及其邻接点列表 private Map<String, List<String>> adjList; public Graph() { adjList = new HashMap<>(); } // 添加顶点 public void addVertex(String vertex) { adjList.putIfAbsent(vertex, new ArrayList<>()); } // 添加边(无向图) public void addEdge(String v1, String v2) { // 确保两个顶点都存在 addVertex(v1); addVertex(v2); // 无向图:双向添加 adjList.get(v1).add(v2); adjList.get(v2).add(v1); } // 打印邻接表 public void printGraph() { for (String vertex : adjList.keySet()) { System.out.println(vertex + " -> " + adjList.get(vertex)); } } public static void main(String[] args) { Graph g = new Graph(); g.addEdge("A", "B"); g.addEdge("A", "C"); g.addEdge("B", "C"); g.printGraph(); }}运行上述代码,输出结果为:
A -> [B, C]B -> [A, C]C -> [A, B]
注意:上面的例子实现的是无向图。如果你需要实现有向图,只需在 addEdge 方法中只添加单向边即可。
在实际应用中,图的边往往带有权重(如距离、成本等)。这时我们可以定义一个内部类来表示带权边:
class WeightedEdge { String target; int weight; public WeightedEdge(String target, int weight) { this.target = target; this.weight = weight; } @Override public String toString() { return target + "(" + weight + ")"; }}// 修改邻接表类型private Map<String, List<WeightedEdge>> weightedAdjList;通过本教程,你已经掌握了如何在Java中使用邻接表来表示图。这种结构是学习更高级Java图算法(如Dijkstra最短路径、Kruskal最小生成树等)的基础。记住,Java边列表(邻接表)不仅节省内存,而且操作灵活,是处理图问题的首选方式之一。
希望这篇关于Java邻接表的教程对你有所帮助!动手实践一下吧,编程能力就是在一次次敲代码中提升的。
本文由主机测评网于2025-12-19发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/20251210173.html