我在写在Java中图论的算法,并已在图中的节点定义为:使用自己的字段在Set中标识对象?
public class Node {
public String UUID;
public Set<Node> children;
// and some other fields & methods
@Override
public int hashCode() {
return UUID.hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == null) return false;
if (!(obj instanceof Node))return false;
Node other = (Node)obj;
return UUID.equals(other.UUID);
}
}
在曲线图上的任何特定的节点的UUID
领域进行了保证是唯一的(通过输入数据集) ,因此我计划将所有节点存储在HashSet<Node>
中,同时读取输入数据集并构建在Node类中也定义为Set<Node> children
的邻接列表。
不过,我很快注意到我无法以优雅的方式将Node
实例存储在我的HashSet<Node>
中,因为Set
不能被随机访问。
的parentNode,childNode 的问题是:我想要得到存储在HashSet
与特定Node
实例的具体UUID
(因而有相同的hashCode
),因为我必须更新每个节点的邻接表,WHILE我无法真正使用任何Set
来做到这一点。
我想我很困惑。如果我切换到Map<String, Node>
,使UUID
是关键,它只是感觉就像哑巴Node类(但UUID
应该是基站的一部分逻辑!)
我读过this post,并仍然相信定义UUID
java应该提供接口来访问Set中的元素(或者至少它的一些实现),因为这通过二叉树不是不可能的,就像C++ STL set.find()那样。
有关我该如何破解这个的任何建议?
'节点其它=(节点)OBJ;' - >不而不检查'instanceof'安全。 – shmosel
使用地图不是愚蠢的。这是您想要通过特定密钥访问时所做的事情。 – RealSkeptic
顺便说一句,根据你的建议,使用'Map'没有什么愚蠢的。 –
Eran