我有这样的方法:
private String convertPolygonToJSON(Polygon p) {
List<LatLng> points=p.getPoints();
String s="[1,["+points.get(0);
for (int i = 1; i < points.size(); i++) {
s=s+","+points.get(i);
}
s=s+"],{\"strokeColor\":\"#FF0000\",\"fillColor\":\"#00FFFF\"}]";
return s;
}
private String getJsonPolygones(List<Polygon> polys) {
String s="";
for (int i = 0; i < polys.size(); i++) {
s=s+convertPolygonToJSON(polys.get(i))+",";
}
return s;
}
将多边形转换为json String, 问题是polgon有很多要点,这个函数被调成一个循环,将多边形List转换为最终的json。
我想,它需要大量的内存,我看到很多GC登录,甚至在15分钟之后循环也没有结束。
(我有一个多边形列表(7xxx点,4xxx点,2xx点.....)
我想知道是否有替代方法可以获得此JSON。
欢迎任何帮助,谢谢你。
答案 0 :(得分:5)
由于人们倾向于忽略评论,因此,在您的情况下,每次创建一个新的字符串对象,因为字符串是不可变的。这将导致大量内存消耗,从而提高GC活动。
使用StringBuilder将允许您在没有这样的内存开销的情况下有效地连接字符串:
private String convertPolygonToJSON(Polygon p) {
List<LatLng> points=p.getPoints();
StringBuilder sb = new StringBuilder("[1,["+points.get(0));
for (int i = 1; i < points.size(); i++) {
sb.append(+ ","+points.get(i));
}
sb.append("],{\"strokeColor\":\"#FF0000\",\"fillColor\":\"#00FFFF\"}]");
return sb.toString();
}
与其他方法类似。
答案 1 :(得分:0)
在这种String用法中,您必须使用StringBuilder。 应用于您获得的代码:
private String convertPolygonToJSON(Polygon p) {
List<LatLng> points = p.getPoints();
StringBuilder sb = new StringBuilder();
sb.append("[1,[");
sb.append(points.get(0));
for (int i = 1; i < points.size(); i++) {
sb.append(',');
sb.append(points.get(i));
}
sb.append("],{\"strokeColor\":\"#FF0000\",\"fillColor\":\"#00FFFF\"}]");
return sb.toString();
}
private String getJsonPolygones(List<Polygon> polys) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < polys.size(); i++) {
sb.append(convertPolygonToJSON(polys.get(i)));
sb.append(',');
}
return sb.toString();
}
答案 2 :(得分:0)
String类是不可变类,因此修改String需要更多的内存和放大器。 CPU使用率(重复工作时)。
对于此类操作,建议您使用StringBuiler或StringBuffer类。
这两者都是可变类。因此,您可以对它们执行字符串操作。