如何使 Thread 构造函数从 LinkedHashMap 中获取值

How to make Thread constructor take values from LinkedHashMap

我正在为分布式系统模块分配作业,其中涉及 在 Java 中模拟具有多个线程的推送八卦协议

我的程序采用邻接表格式 ("node: neighbour1, neighbour2, etc.") 的 .txt 文件:

1:2,4,6
2:1,3,4,5
.
.
.

并创建一个 K = 节点,V = 字符串(所有邻居的)的 LinkedHashMap,它看起来像:

{1=2,4,6, 2=1,3,4,5 ...}

更具体地说,LinkedHashMap 有 K = String,V = String。

根据这张地图,我可以使用 Map 方法 map.keySet() 创建一个包含节点的列表,并使用 map.values() 方法创建一个包含邻居的单独列表。我还可以创建一个字符串类型的数组,或邻居的字符串[]。

每个节点只能与其在 LinkedHashMap 中定义为值的邻居通信。

八卦(推送)协议: 假设一个节点最初有信息。通知节点将信息发送到随机选择的邻居,该邻居是从它的邻居集合中抽取的(有替换)。 初始节点必须通过单独的互连线程发送信息。当邻居从互连收到信息时,它会做与初始节点相同的事情。换句话说,它从自己的一组邻居中随机选择一个邻居,并通过互连进一步发送信息。最终,每个人​​都获得了信息,协议终止。

我的问题如下: 给定 LinkedHashMap,我如何在键的基础上实例化一个节点,以便每个节点都知道它的邻居是谁?更直接地说,Node Thread 的构造函数如何从 LinkedHashMap 中获取具有特定 Value 的特定 Key?

当我尝试这样的事情时,它会给我整个邻居列表,而不是特定于该节点的列表。

public Node extends Thread {
    public Node(Integer ID, List<String> neighbors){
    }
}

*加法:**

有人要求我澄清 "communicate" 的含义。请观看来自 Coursera 的视频:

https://www.coursera.org/learn/cloud-computing/lecture/5AOex/1-2-the-gossip-protocol

如果要将 key-value 对从 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);
}

Map.entrySet

Map.Entry