我有一个HashMap,它包含String作为键,Object作为值为了对HashMap进行排序我创建了一个TreeMap,遍历HashMap并将HashMap的每个条目放入一个TreeMap中,其中key是带宽和值信号的实例。这是我的代码
public void createSortedSet(HashMap<String, Signal> map, long totalSize) {
TreeMap<Float, Signal> sortedMap = new TreeMap<Float, Signal>();
JOptionPane.showMessageDialog(null, map.size());
try {
final Iterator<String> iterator = map.keySet().iterator();
while (iterator.hasNext()) {
String messageName = iterator.next();
Signal signal = map.get(messageName);
signal.setBandwidth((signal.getSize() / (float) totalSize) * 100);
sortedMap.put(signal.getBandwidth(), signal);
}
JOptionPane.showMessageDialog(null, sortedMap.size());
} catch (Exception e) {
e.printStackTrace();
}
}
这里的问题是地图的大小是8318而在while循环之后我检查TreeMap的大小时它给出了455 ??这是否意味着并非所有信号实例都存储在TreeMap中
任何帮助?
答案 0 :(得分:0)
请注意,您在TreeMap
中使用的密钥与HashMap
中的密钥不同。作为Map
,密钥必须是唯一的。 put
方法将使用相同的键替换任何先前的值。您的新密钥计算可能会产生重复,并导致新地图的大小低于旧地图。
答案 1 :(得分:0)
我希望问题是您在原始地图中有条目,其“大小”(由getSize()
返回)是相同的。由于Map不能为同一个键保存多个值,因此原始的具有相同“大小”的条目将被删除。
答案 2 :(得分:0)
不同的信号包含等于带宽sortedMap.put(signal.getBandwidth(), signal);
。