我目前开始了解一些开源控制器(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
。键类型为FlowEntry
,值部分为SortedMap <Long, Double>
,因此另一个具有Long
键和Double
值的映射。flowStatTable.put(matchedFlow, Collections.synchronizedSortedMap(new TreeMap<Long, Double>()));
这将向外部地图添加一个条目。密钥是
matchedFlow
,值是Collections.synchronizedSortedMap(new TreeMap<Long, Double>())
这将获取使用
new TreeMap<Long, Double>()
创建的排序映射,并使用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);