0

我想在地圖中獲得距離,但我一直得到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; 

} 
} 
+0

也許是因爲新QueryClustering()getDistance的返回一個大對象,你必須在這種類型的太多的實例。無法放入堆中的映射 –

+0

請勿在每次迭代中創建新的QueryClustering對象。嘗試在任何'for'之外創建它,並在'for'子句中調用方法getDistance(...)。 –

+0

請您提供更多詳細信息,包括確切的錯誤信息?我可以看到的一個(無關的)問題是你正在做'vectors.get(i)'。 'i'是一個'int',但'vectors'的關鍵類型是'String'。 –

回答

0

請嘗試用這個修改:

Map<Integer, double[]> getDistanceTable(Map<String, Double[]> vectors) { 

    // Define it once, call it multiple times inside 'for' clause: 
    QueryClustering queryClustering = new QueryClustering(); 

    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] = queryClustering.getDistance(vectors.get(i), vectors.get(j)); 
      index++; 
     } 
     distance.put(i, features); 
     size--; 
    }  
    return distance; 
} 
+0

感謝但仍然錯誤保持,沒有任何改變:( – Ffm

+0

@Nicolas Filotto有超過100,000個按鍵,每個按鍵都有一個Double [],其中有16個值 – Ffm

+0

@Adnan:我們將繼續改進代碼。在int上替換Integer類似於: Map distance = new HashMap (); 請保持最新改進(QueryClustering創建外部'for'子句)。 –