list使用时内存溢出

今天解决了一个困扰很长的问题,遍历一个集合,取出值递归赋值给一个实体类,想要得到的报文如下:

[
    {
        "conditionList": [
            {
                "t_classroom": "classid",
                "t_student": "classid"
            },
            {
                "t_classroom": "classname",
                "t_student": "name"
            }
        ],
        "selectBlock": {
            "joinInfos": [
                {
                    "conditionList": [
                        {
                            "t_classroom": "gradeid",
                            "t_grade": "gradeid"
                        }
                    ],
                    "selectBlock": {
                        "joinInfos": [
                            {
                                "conditionList": [ { "t_grade": "gradeid", "t_nation": "gradeid" } ],
                                "selectBlock": { "table": "t_nation" } }
                        ],
                        "table": "t_grade"
                    }
                }
            ],
            "table": "t_classroom"
        }
    }
]

一个selectBlock中如果有关联表信息,就有joinInfos,递归往下….

在写代码的时候,把逻辑想明白了。

List<JoinInfo> joins = new ArrayList<>();
JoinInfo joinInfo = null;
SelectBlock block = null;
for (int i = list.size() - 1; i >= 0; i--) {
    block = new SelectBlock(tables.get(i), null, null, joins);
    joinInfo = new JoinInfo(null, list.get(i), block);
    joins.add(joinInfo);
}

joinInfos.add(joinInfo);

但是用ObjectMapper打出joinInfo的值报内存溢出的错。跟断点看了一下joins,竟然递归了很多个selectBlock。

list不用了就需要清除掉,所以改成下面的代码就好了:

List<JoinInfo> joins = null;
JoinInfo joinInfo = null;
SelectBlock block = null;
for (int i = list.size() - 1; i >= 0; i--) {
    block = new SelectBlock(tables.get(i), null, null, joins);
    joinInfo = new JoinInfo(null, list.get(i), block);

    joins = new ArrayList<>(); // 清空一下
    joins.add(joinInfo);
}

    joinInfos.add(joinInfo);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值