判断是否存在递归死循环,该如何修改?


private List<DocumentationClassification> getByParent(DocumentationClassification classification) {
        List<DocumentationClassification> list = new ArrayList<>();
        list.add(classification);
        if (!"3".equals(classification.getClassificationLevel())) {
            List<DocumentationClassification> classificationList = getByParentId(classification.getId().toString());
            if (classificationList.size() > 0) {
                for (DocumentationClassification classification1 : classificationList) {
                    list.addAll(getByParent(classification1));
                }
            }
            return list;
        } else {
            return list;
        }
    }

debug看看不就知道了

1、有没有写退出条件
2、退出条件是否可以被执行到

list不在递归中new会好一点,省得浪费空间,这样可能好一点:

  private void getByParent(DocumentationClassification classification, List<DocumentationClassification> list) {
        list.add(classification);
        if (!"3".equals(classification.getClassificationLevel())) {
            List<DocumentationClassification> classificationList = getByParentId(classification.getId().toString());
            // null会报错,empty集合不进for-each
            if (classificationList != null) {
                for (DocumentationClassification classification1 : classificationList) {
                    getByParent(classification1,list);
                }
            }
        }
    }

可以定义一个计数器,循环一次加一,截止到10w退出报错