有一些开源 Controller ( floodlight ),我目前开始了解代码结构,但我在代码中看到了这一行,是否应该添加
Collections.synchronizedSortedMap(new TreeMap<Long, Double>())
什么将被添加到 flowStatTable 中?
protected SortedMap <FlowEntry, SortedMap <Long, Double>> flowStatTable;
flowStatTable.put(matchedFlow, Collections.synchronizedSortedMap(new TreeMap<Long, Double>()));
为什么这样访问:
flowStatTable.get(matchedFlow).put(checkPointTimeStamp, utilization);
最佳答案
SortedMap <FlowEntry, SortedMap <Long, Double>>
这声明了 SortedMap
。 key 类型为FlowEntry
值部分为SortedMap <Long, Double>
所以另一张 map 上有 Long
key 和一个Double
值。
flowStatTable.put(matchedFlow, Collections.synchronizedSortedMap(new TreeMap<Long, Double>()));
这是向外部 map 添加一个条目。关键是matchedFlow
,值为
Collections.synchronizedSortedMap(new TreeMap<Long, Double>())
这是使用 new TreeMap<Long, Double>()
创建的排序 map 并使用 Collections.synchronizedSortedMap
将其转换为同步映射以使其线程安全。
flowStatTable.get(matchedFlow).put(checkPointTimeStamp, utilization);
此内容的第一部分 flowStatTable.get(matchedFlow)
正在从外部映射中获取值,因此获取的结果将是 SortedMap <Long, Double>
。 put(checkPointTimeStamp, utilization)
然后,部分将在此内部映射中存储新的键/值对。
你可以这样编写代码:
SortedMap<Long, Double> newInner = Collections.synchronizedSortedMap(new TreeMap<Long, Double>());
flowStatTable.put(matchedFlow, newInner);
...
SortedMap<Long, Double> existingInner = flowStatTable.get(matchedFlow);
existingInner.put(checkPointTimeStamp, utilization);
关于java - 关于 eclipse 中的 java map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25801872/