我有一个Person数组,我想根据它的名字找到特定的Person。 我怎么能这样做?
// Person
public class Person {
String name;
private Person [] adjacent;
public int adjacentCount;
public Person(String n){
this.name=n;
}
public void addAdjacent(Person x){
if(adjacentCount<30){
this.adjacent[adjacentCount]=x;
adjacentCount++;
} else {
System.out.println("No more adjacent can be added");
}
}
public Person[] getAdjacent(){
return adjacent;
}
public String getName(){
return name;
}
}
现在我们需要将人员添加到图表中,然后将方法添加到另一个方法,现在我想知道如果我们只知道它的名字,如何从图中知道这个人
public void addFriendship(String name1, String name2){
}
答案 0 :(得分:1)
假设您假设您可以从一个根到达每个其他人(假设它是一个任务)。你遇到的第一个问题是你应该期待很多循环依赖。例如A是B的朋友,B很可能是A的朋友。另外如果A是C的朋友,那么C很可能是B的朋友。你需要一种遍历Graph访问的方式每个节点只有一次。
执行此操作的标准解决方案是使用IdentityHashMap(您说过您不能使用),但您可以实现自己的(有点痛苦但可行)这可以跟踪您看到的每个节点,以避免在循环中四处转转。
我会保留一个Map<String, Person>
,这样你就可以按姓名查找一个人。
像这样的图形的问题是你需要不能假设每个人都与其他人相连。即不是每个人都可以到达。也知道什么时候停下来很棘手。
BTW我建议你看看neo4j,这是一个非常酷的图表数据库。