0

我有一个 HashMap ,其中包含 String 作为 key ,一个 Object 作为 value 为了对我的 HashMap 进行排序,我创建了一个 TreeMap ,遍历 HashMap 并将 HashMap 的每个条目放入一个 TreeMap ,其中 key 是带宽, value 是信号的实例.这是我的代码

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中

任何帮助?

4

3 回答 3

0

请注意,您在 中使用的键与在 中使用的键TreeMap不同HashMap。作为 a Map,键必须是唯一的。该put方法将使用相同的键替换任何先前的值。您对新密钥的计算很可能会产生重复项,并导致新地图的大小小于旧地图。

于 2013-09-24T13:13:02.497 回答
0

我希望这个问题是您在原始地图中有条目,其“大小”(由 返回getSize())是相同的。由于 Map 不能为同一个键保存多个值,因此将消除原始条目中具有相同“大小”的条目。

于 2013-09-24T13:20:38.327 回答
0

不同的信号包含相等的带宽sortedMap.put(signal.getBandwidth(), signal);

于 2013-09-24T13:23:42.817 回答