在并查集的实现里面有提到,并查集两种实现方式:
- 一种是使用数组,索引作为元素,数组值作为集合,这种方式适合快速查询。
- 一种是基于森林实现,不过也是使用数组结构,索引作为元素,数组值存储其父节点的方式。
在一般使用并查集的场景中,基本上都是采用第二种,基于森林的实现方式。
不过在真实业务场景中,元素可能不仅仅是数字类型,也有可能是字符串类型,或者对象类型。
所以,在实现上,需要换一种结构实现。
基于哈希表实现
如果元素是字符串或对象类型,我们可以直接使用Map代替数组来实现查并集。
其中元素作为Map的键key,而其所属的集合名作为Map的value值。
初始情况下,元素的所属集合(即parent节点)为自己。
1 | class UnionFindSet { |
基于对象节点
由于并查集是一个树的结构,因此,我们可以采用对象节点的方式来实现,就像实现二叉树一样,定义一个节点对象,然后通过parent指针指向其父节点,一次来达到树的节点引用。
1 | class ItemNode { |
此两种实现方式,在使用上可能更具通用性,不管要处理的数据类型是什么,都可以应对。