java遞迴簡單例項
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,三星手機下面沒有。