我有一個存儲各種緯度和經度值以及其他屬性的散列表。我想根據名爲interval
的用戶輸入變量將其打印出來。間隔越大,hashmap越大。我的問題是,目前我能夠達到的最大間隔時間是300,以生成完整的csv文件。當我輸入400,Excel文件不能被完全加載,並且更重要的是,我需要的時間間隔在500設置當我將它設置爲500,這是錯誤我得到的,來自大量填充的HashMap的CSV輸出
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source)
at java.lang.AbstractStringBuilder.ensureCapacityInternal(Unknown Source)
at java.lang.AbstractStringBuilder.append(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
我看着它顯然這是因爲輸出首先被複制到一個不能支持這麼多數據的數組中。有沒有辦法我可以分解我的HashMap,然後結合然後將它們打印成csv?
FileWriter writer= null;
String output = "";
try {
writer = new FileWriter("output.csv");
writer.write("Name,Latitude,Longitude,Distance");
StringBuilder builder = new StringBuilder();
for (Entry<String, LocationPoint> entry : locationHash.entrySet()) {
String key = entry.getKey();
Location lp = entry.getValue();
double lat = lp.getLatitude();
double lng = lp.getLongtitude();
double dist = lp.getDistance();
String name= "";
String pName = lp.getPointName();
if (pName.contains("nearStation") || pName.contains("nearLine")) {
name = pName.split("_")[1];
} else
name = pName.split("_")[0];
//
builder.append(name);
builder.append(",");
builder.append(String.valueOf(lat));
builder.append(",");
builder.append(String.valueOf(lng));
builder.append(",");
builder.append(String.valueOf(dist));
builder.append(System.getProperty("line.separator"));
}
output = builder.toString();
mrtWriter.write(output);
System.out.println("Output Complete");
} finally {
if (mrtWriter != null) {
mrtWriter.close();
}
}
** LocationHash存儲密鑰的字符串和該值的Location對象。
或者,如果您使用它進行緩衝,請使用BufferedWriter – RobAu
謝謝!我決定我的stringbuilder沒有用處。你達人歡呼 – user3763216