Android长串串联,

Sim*_*imo 0 java string android json

我有这个方法:

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;
    }
Run Code Online (Sandbox Code Playgroud)

将polygone转换为json String,问题是polgon有很多点,这个函数被调成一个循环,将多边形List转换为最终的json.

我想,它需要大量内存,我看到很多GC登录,甚至在15分钟之后循环也没有结束.

(我有一个多边形列表(7xxx点,4xxx点,2xx点.....)

我想知道是否有替代方法可以获得这个JSON.

欢迎任何帮助,谢谢你提前.

npi*_*nti 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();

}
Run Code Online (Sandbox Code Playgroud)

而对于其他方法也是如此.