【发布时间】:2011-03-16 07:22:55
【问题描述】:
我创建了一个类 Foo,它具有返回 Array<Int> 的方法 toArray()。
现在,我有一个 HashMap 将 Strings 映射到 HashMaps,它将 Objects 映射到 Foo。那就是:
HashMap<String,HashMap<Object,Foo>>
我想创建一个新类型的对象:
HashMap<String,HashMap<Object,Array<Int>>>
这是通过为原始 HashMAp 中的每个元素 Foo 调用函数 toArray() 获得的。
为此,我通常会这样做:
public static HashMap<String,HashMap<Object,Array<Int>>> changeMap(Map mpOld) {
Object key2;
String key1;
Iterator it2;
HashMap<String,HashMap<Object,Array<Int>>> mpNew=
new HashMap<String,HashMap<Object,Array<Int>>>()
Iterator it1 = mpOld.keySet().iterator();
while (it1.hasNext()) {
key1=it1.next();
it2= mpOld.get(key1).keySet().iterator();
mpNew.put(key1,new HashMap<Object,Array<Int>>())
while (it2.hasNext()) {
key2=it2.next();
mpNew.get(key1).put(key2,mpOld.get(key1).get(key2).toArray());
//TODO clear entry mpOld.get(key1).get(key2)
}
//TODO clear entry mpOld.get(key1)
}
return mpNew;
}
类似的代码可以正常工作,但是 HashMap 的大小太大而无法在内存中容纳其中两个。如您所见,我添加了两个要清除某些条目的点。问题是,如果这样做,我会收到并发错误,或者迭代器循环会终止。
我想知道是否有更好的方法来遍历地图并复制信息。
另外,我在一个 Scala 项目中工作,但在这里我必须使用 Java 类型来解决一些兼容性问题。虽然Java.util.HashMap 不是迭代器,但也许 Scala 有一些隐藏的功能来处理这个问题?
谢谢,
【问题讨论】:
标签: java memory scala iterator hashmap