我正在为分布式系统模块工作,该模块涉及在Java中模拟带有多个线程的推送闲聊协议。
我的程序采用邻接列表格式的.txt文件("节点:neighbour1,neighbour2等等"):
1:2,4,6
2:1,3,4,5
.
.
.
创建一个LinkedHashMap,其中K = node,V = String(所有邻居),如下所示:
{1=2,4,6, 2=1,3,4,5 ...}
更具体地说,LinkedHashMap有K = String,V = String。
从这个地图我可以使用Map方法map.keySet()创建一个包含节点的List,并使用map.values()方法创建一个带有邻居的单独列表。我还可以创建一个String类型的Array,或者是邻居的String []。
每个节点只能与其邻居通信,这些邻居在LinkedHashMap中被定义为值。
八卦(推送)协议: 假设一个节点最初具有该信息。被通知的节点将信息发送到随机选择的邻居,该邻居从其邻居集合中抽取(具有替换)。 初始节点必须通过单独的互连线程发送信息。当邻居从互连接收信息时,它与初始节点的作用相同。换句话说,它从其自己的一组邻居中随机选择一个邻居,并通过互连进一步发送信息。最终,每个人都有信息,协议终止。
我的问题如下: 给定LinkedHashMap,我如何在密钥的基础上实例化一个节点,以便每个节点知道它是谁的邻居?更直接地说,Node Thread的构造函数如何从LinkedHashMap中获取具有特定值的特定Key?
当我尝试这样的事情时,它会给我整个邻居列表,而不是那些特定于节点的列表。
public Node extends Thread {
public Node(Integer ID, List<String> neighbors){
}
}
*增加:**
我被要求澄清什么&#34;沟通&#34;暗示。请从Coursera中看到这段视频:
https://www.coursera.org/learn/cloud-computing/lecture/5AOex/1-2-the-gossip-protocol
答案 0 :(得分:0)
如果要将键值对从Map
传递给构造函数或方法,可以执行以下操作:
public Node extends Thread {
public Node(Map.Entry<String, String> entry) {
String id = entry.getKey();
String neighbors = entry.getValue();
// ...
}
}
然后你可以按照你想要的方式调用它。
for (Map.Entry<String, String> entry : map.entrySet()) {
Node node = new Node(entry);
}