我想在地图中获得距离,但我一直得到java堆错误......我不明白为什么甚至特别是当数据存储在地图中。Java堆错误
这里是我的代码:
Map<Integer, double[]> getDistanceTable(Map<String, Double[]> vectors) {
Map<Integer, double[]> distance = new HashMap<>();
int size = vectors.keySet().size();
for(int i=0; i<vectors.keySet().size(); i++) {
double[] features = new double[size];
int index = 1;
features[0] = 0;
for(int j = i+1; j<vectors.keySet().size(); j++) {
features[index] =new QueryClustering().getDistance(vectors.get(i), vectors.get(j));
index++;
}
distance.put(i, features);
size--;
}
return distance;
}
}
也许是因为新QueryClustering()getDistance的返回一个大对象,你必须在这种类型的太多的实例。无法放入堆中的映射 –
请勿在每次迭代中创建新的QueryClustering对象。尝试在任何'for'之外创建它,并在'for'子句中调用方法getDistance(...)。 –
请您提供更多详细信息,包括确切的错误信息?我可以看到的一个(无关的)问题是你正在做'vectors.get(i)'。 'i'是一个'int',但'vectors'的关键类型是'String'。 –