【发布时间】:2022-11-22 00:23:26
【问题描述】:
我有一个 Hashmap HashMap <Integer, Integer> map,我想将 keyset() 类型更改为 BinaryTreeNode,它已经预先声明,而不是我能够做到的 int。但是,我想知道如何按照与原始 HashMap map 中相同的顺序添加适当的 map.values()
这是我的代码
public static BinaryTreeNode parentMapToTree(Map<Integer, Integer> map) {
HashMap<BinaryTreeNode, Integer> l = new HashMap<>();
for (int i = 0; i < map.keySet().size(); i++){
BinaryTreeNode node = new BinaryTreeNode(i);
l.put(node, map.values());
}
我应该对我的代码进行哪些更改以确保它可以编译并按我想要的方式执行?
【问题讨论】:
-
我认为您几乎拥有它,但是您正试图将整个旧地图放入新地图的每个键中——相反,您应该只添加通过查找该特定键获得的内容。
-
由于 HashMap 没有定义顺序,因此询问您是否可以“以相同顺序”向其添加任何内容没有多大意义。
-
此外,迭代键和值而不是使用 for 循环会更清晰。一般来说,在现代编程中不鼓励像这样循环索引。
-
@EdwardPeters 所以我只能说 l.put(BinaryTreeNode, map.keyset())?
-
@Droid 那为什么不直接遍历 entrySet 呢?一个简单的
for(Entry<Integer, Integer> entry : map.entrySet())循环,然后您可以通过entry.getKey();和entry.getValue();获取键和值(并执行类似l.put(new BinaryTreeNode(entry.getKey()), entry.getValue());的操作来填充您的新地图)