【发布时间】:2012-07-17 10:29:08
【问题描述】:
我有一张一对一的地图:
HashMap<Integer, ArrayList<Double>> matrix;
Integer 是索引,ArrayList 的维度约为 50。索引的大小可能高达一百万。我想尽快复制它(包括 Arraylist 值)。
我做了以下:
public Map<Integer,ArrayList<Double>> getCloneOfMatrix(){
Map<Integer, ArrayList<Double>> newMatrix = new HashMap<Integer,ArrayList<Double>>();
for(int i=0 ; i < indexSize; i++){
ArrayList<Double> arrList = new ArrayList<Double>();
arrList=(ArrayList<Double>) matrix.get(i).clone();
newMatrix.put(i,arrList);
}
return newMatrix;
}
我发现它的计算成本很高,有什么方法可以更快地做到这一点。
【问题讨论】:
-
可能不超过几个 %,但是在分配另一个引用之前立即分配给
arrList的new ArrayList<Double>();完全没有意义。 -
奇怪的是地图的作用类似于列表...当您使用 for [0..indexSize] 迭代地图时,您不能使用列表来代替吗?
-
我不明白你的意思。能详细点吗?
-
有一些用于稀疏矩阵的内置库(Colt 就是一个例子),我相信使用这些库可能会为您节省一些实施时间
-
对这样一张巨大的地图进行深度复制总是会耗费大量计算资源。如果您期望有这么多数据,我不确定 Map 是否是正确的方法。
标签: java algorithm arraylist clone