java递归简单实例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/long198861/article/details/52604541

1.自己的第一篇博客,想把自己的觉得有用的记录下来,也可以锻炼自己的表达能力。内容谈不上丰富,如果写的不好,请大家多多包涵。

2.废话不多说,就是干,先准备下脚本

drop TABLE IF EXISTS category;
CREATE TABLE `category` (
  `id` int(11) NOT NULL,
  `pid` int(11) DEFAULT NULL,
  `name` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO category VALUES (1,0,'手机');
INSERT INTO category VALUES (2,0,'电脑');
INSERT INTO category VALUES (3,1,'苹果手机');
INSERT INTO category VALUES (4,1,'三星手机');
INSERT INTO category VALUES (5,2,'笔记本');
INSERT INTO category VALUES (6,2,'台式机');
INSERT INTO category VALUES (7,3,'iphone6');
INSERT INTO category VALUES (8,3,'iphone7');

SELECT * FROM category;

----2.1 新建一个品类表,插入几条记录,id不能重复,每条数据都是id,pid这种形式


3.新建一个Java项目

----3.1 引入mysql-connector-java-5.1.6

----3.2 新建实体category.java

public class Category {
    private Integer id;
    private Integer pid;
    private String name;
    private List<Category> childList;// 子集合

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getPid() {
        return pid;
    }

    public void setPid(Integer pid) {
        this.pid = pid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Category> getChildList() {
        return childList;
    }

    public void setChildList(List<Category> childList) {
        this.childList = childList;
    }

    @Override
    public String toString(){
        return "id:" + id +",pid:" + pid +",name:" + name +",childList:" + childList+"";
    }


-----3.3测试类test.java
public class Test {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456");
            stmt = conn.createStatement();
            String sql = "select id,pid,name from category";
            ResultSet rs = stmt.executeQuery(sql);
            List<Category> list = new ArrayList<Category>();
            while (rs.next()) {
                Category cate = new Category();
                cate.setId(rs.getInt("id"));
                cate.setPid(rs.getInt("pid"));
                cate.setName(rs.getString("name"));
                list.add(cate);
                
            }
            //递归方法
            list = dgCategoryList(list,1);//查询手机下面的
            System.out.println(list);
            rs.close();
            stmt.close();
            conn.close();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    
    /**
     * 递归方法(品类递归)
     *
     * @param categoryList
     * @param parentId
     * @return
     */
    private static List<Category> dgCategoryList(List<Category> categoryList, Integer parentId)
    {
        List<Category> childList = new ArrayList<Category>();
        for (Category c : categoryList)
        {
            if (null != c && null != c.getId() && null != c.getPid())
            {
                int id = c.getId();
                int pid = c.getPid();
                if (parentId==pid)
                {
                    List<Category> childs = dgCategoryList(categoryList, id);
                    c.setChildList(childs);
                    childList.add(c);
                }
            }
        }
        return childList;
    }
}

-----3.4控制台打印




结果:手机下面有苹果手机和三星手机,苹果手机有iphone6,iphone7,三星手机下面没有。

总结:数据库里的记录是id和父pid的数据,而业务需要是把某一个品类所有的子品类及子品类下面包含的。这个时候在内存中做递归





猜你喜欢

转载自blog.csdn.net/long198861/article/details/52604541
今日推荐