在 Java 中实现通用图

2025 年 5 月 13 日 | 阅读 6 分钟

泛型用于创建图的 Java 代码。Java 的 HashMap 类用于实现 Graph 类。众所周知,HashMap 有一个键和一个值,在图中,节点表示为键,它们的邻接列为值。

什么是泛型?

泛型是指参数化类型。其思想是允许一种类型(如 IntegerString 或用户定义的类型)用作 方法接口 中的参数。泛型允许我们构建能够处理各种数据类型的类。泛型实体是使用参数化类型的类、接口或方法。

什么是图?

图是一种由边和顶点组成的数据结构。顶点是存储值的节点/标签,边将它们连接起来。“泛型图”一词通常指可以一次创建并在不同数据中使用而无需修改的图。Java 中的用户可以使用泛型类来生成泛型

泛型图的实现

方法:使用 HashMap

可以使用泛型类和 HashMap 来实现泛型图。主要是使用 HashMap,因为它包含键值对。在这种情况下,键代表节点,邻接列表代表图的值。这简化了泛型图的实现。

就像在 C++ 中一样,我们在创建泛型类时通常使用 <> 来定义参数类型。

创建泛型类的对象。

语法

请注意,像 'int'、'char' 和 'double' 这样的原始类型不能在参数类型中使用。

输出

 
The graph is: 
0 : 1 4 
1 : 0 2 3 4 
2 : 1 3 
3 : 1 2 4 
4 : 0 1 3 

The graph contains 5 vertices
The graph contains 7 edges.
The graph contains an edge between 3 and 4.
The graph does not contain 5 as a vertex.
The adjacent element of 1 are
0,2,3,4   

解释

上面的程序创建了一个带有 HashMap 的泛型图,其中每个顶点表示一个附近顶点的列表。它包括添加顶点和边、确定它们是否存在、计算顶点和边以及检索相邻节点的方法。图可以根据布尔类型参数拥有有向边和无向边。

方法:使用 HashSet

泛型类和 HashSet 可以结合使用来创建泛型图。首选 HashSet,因为它能保留唯一元素,同时提供快速查找。

键代表节点,HashSet 包含它们的相邻节点,形成邻接列表。这种方法通过自动防止重复边来帮助正确管理图结构。

在定义泛型类时,我们使用尖括号 (<>) 来表示类型参数。

创建泛型类对象的语法如下

文件名:GraphCreation.java

输出

 
P: Q N 
Q: P N 
R: 
K: L M 
L: K 
M: K N 
N: P Q M 

The total number of vertices is: 7
The total number of edges is: 6   

解释

上面的程序使用 HashMap 和 HashSet 创建了一个泛型无向图,其中每个顶点映射到一个附近顶点的集合。它包括添加顶点和边、检查它们是否存在以及计算顶点和边的方法。

HashSet 保证了边的唯一性,防止了重复连接。main() 函数演示了图的生成、边的添加以及邻接列表的输出。