如何在 Java 中拆分 HashMap

新手上路,请多包涵

我想知道是否可以将 HashMap 拆分成更小的子图。

在我的例子中,我有一个包含 100 个元素的 HashMap,我想从原始 HashMap 创建 2 个(或更多)较小的 HashMap,第一个包含从 0 到 49 的条目,第二个包含从 50 到 99 的条目。

 Map <Integer, Integer> bigMap = new HashMap <Integer, Integer>();

//should contains entries from 0 to 49 of 'bigMap'
Map <Integer, Integer> smallMap1 = new HashMap <Integer, Integer>();

//should contains entries from 50 to 99 of 'bigMap'
Map <Integer, Integer> smallMap2 = new HashMap <Integer, Integer>();

有什么建议么?非常感谢!

原文由 RNO 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

你必须使用 HashMap 吗?

TreeMap 对这种事情真的很好。这是一个示例(请注意,0、50 和 99 是映射键, 而不是 索引):

 TreeMap<Integer, Integer> sorted = new TreeMap<Integer, Integer>(bigMap);

SortedMap<Integer, Integer> zeroToFortyNine = sorted.subMap(0, 50); // toKey inclusive, fromKey exclusive
SortedMap<Integer, Integer> fiftyToNinetyNine = sorted.subMap(50, true, 99, true);

原文由 sharakan 发布,翻译遵循 CC BY-SA 4.0 许可协议

由于 HashMap 是无序的(条目可以按任何顺序出现),因此完全拆分它是没有意义的。我们可以简单地使用交替布尔标志。

 boolean b = false;
for (Map.Entry e: bigMap.entrySet()) {
  if (b)
    smallMap1.put(e.getKey(), e.getValue());
  else
    smallMap2.put(e.getKey(), e.getValue());
  b = !b;
}

原文由 Audrius Meškauskas 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题