0

Haritadaki mesafeyi elde etmeye çalışıyorum ama java yığın hatası almayı sürdürüyorum ... Verilerin bir Harita'da saklandığında bile neden olduğunu anlamıyorum.Java Heap Hatası

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

Belki de yeni QueryClustering() getDistance büyük nesneyi döndürür ve bu tip çok sayıda örneği var. –

+0

yığınına sığamayan Harita Her yinelemede yeni bir QueryClustering nesnesi oluşturmamaya çalışın. Herhangi bir 'for' dışında oluşturmaya çalışın ve 'for' deyimindeki getDistance (...) yöntemini çağırın. –

+0

Lütfen tam hata mesajı da dahil olmak üzere daha fazla ayrıntı verebilir misiniz? Görebildiğim bir (alakasız) konu, 'vectors.get (i)' yaptığınızdır. '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' –

cevap

0

bu değişiklik ile deneyin: İşte

benim kodudur

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

Yine de hata devam ediyor, bir şey değiştirmedi :( – Ffm

+0

@Nicolas Filotto 100.000'den fazla anahtar var. Her anahtarın içinde 16 değer bulunan bir Double [] var. – Ffm

+0

@Adnan: Kod geliştirmeye devam edeceğiz. Tamsayı harita üzerinde değiştirme, int için: Bu gibi: Harita distance = yeni HashMap (); Ayrıca, en son gelişmeyi ('for' deyiminin dışında QueryClustering oluşturma) devam edin. –