编写一个java类,用来表示出部队中 军 师 旅 团这种树状数据结构,使上级能检索到下级,下级也能检索到上级
一 TreeLeader方法:
1.1首先把傳過來的list 集合遍歷
1.2 根據遍歷創建一個leader對象 用來接收各級leader對象的name 值
1.3 把這個對象添加到之前new 的ArrayList集合中
1.4 再獲取到當前對象的children的值 再調用本身
1.5 當前leader 對象沒有子成員時 不滿足當前方法參數所需要的條件 遞歸就會停止
public class Leader {
private Integer id;
private String name;
private Integer parentId;
private Integer level;
public Leader(Integer id, String name, Integer parentId, Integer level) {
super();
this.id = id;
this.name = name;
this.parentId = parentId;
this.level = level;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
public Integer getLevel() {
return level;
}
public void setLevel(Integer level) {
this.level = level;
}
}
public class Test {
static List data=new ArrayList();
static {
Leader l1=new Leader(1,“軍長”,0,1);
Leader l2=new Leader(2,“師長”,1,2);
Leader l3=new Leader(3,“旅長”,2,3);
Leader l4=new Leader(4,“團長”,3,4);
data.add(l1);
data.add(l2);
data.add(l3);
data.add(l4);
}
public static void main(String[] args) {
List list = new ArrayList<>();
System.out.println(“查詢前集合大小”+data.size());
for(Leader l:data) {
if(l.getParentId()==0) {
list.add(l);
if(ifChilds(data,l.getId())) {
List childs = new ArrayList<>();
childs=getChildList(data,l.getId(),childs);
list.addAll(childs);
}
}
}
System.out.println(“查詢后集合大小”+list.size());
}
private static List getChildList(List data2, Integer id, List childs) {
// TODO Auto-generated method stub
for(Leader leader:childs) {
if(ifChilds(childs,leader.getId()));
}
private static boolean ifChilds(List list, Integer Pid ) {
// TODO Auto-generated method stub
boolean flag=false;
for(Leader leader:list) {
flag=true;
break;
}
return flag;
}
}
樹形結構在數據庫的設計過程中是一種比較常見的模型,指的是各元素之間存在‘一對多’的結構模型。在樹形結構中,樹根結點沒有前驅結點,其余每個結點有且只有一個前驅結點。葉子結點沒有后續結點,其余每個結點的后續節點數可以是一個也可以是多個。
在數據庫中建好對應的表’t_classes’后,可以使用Java實現對該表的CRUD操作,下面介紹遞歸的方法實現對表中元素遍歷查詢,并將其有層次地顯示出來。
對應的Java語句如下所示:
package com.njupt.exam.manager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.njupt.exam.util.DbUtil;
/**
- 班級管理類
- @author hzy
*/
public class ClassesManager {
public void dispalyClassesList() {Connection conn = null;try {conn = DbUtil.getConnection();displayClassesList(conn,0,0);} catch(Exception e) {e.printStackTrace();//此處conn遵循一個原則:在哪里打開就在哪里關閉
} finally {DbUtil.close(conn);} }//構成方法重載
public void displayClassList(Connection conn,int pid,int level) {//level表示空格的個數,隨節點層數的增加而增加,使顯示結果具有層次感
//此處s用于使顯示結果更具有層次感
String s = "";PreparedStatement psta = null;ResultSet rs = null;String sql = "use 成績管理系統 select * from t_class where pid = ?";for(int i=0;i<level;i++)s += " ";try {psta = conn.prepareStatement(sql);psta.setInt(1,pid);rs = psta.executeQuery();while(rs.next()) {//打印輸出當前節點的信息,當前節點的父節點為參數pid
System.out.println(s + rs.getInt("class_id") + " " + rs.getString("class_name"));//判斷當前節點是否為葉子節點
/如果不是葉子節點,說明當前節點下還有子節點,需要再次調用自身對子節點進行顯示,此時displayClassesList函數中應當傳入的參數為conn,由于要對子節點進行顯示,故pid應為當前節點的id,level隨著節點層數的變化變為level+1/
if(rs.getInt("leaf") == 0) { displayClassesList(conn,rs.getInt("class_id"),level+1)} }} catch(SQLException e1) {e1.printStackTrace();} finally {DbUtil.close(rs);DbUtil.close(psta);} }//主函數實現對顯示函數的調用
public static void main(String args[]) {new ClassesManager.displayClassesList(); }}
由于之前在寫樹結構遍歷的時候都是 copy 的別人的代碼,想著把功能完成就行,并沒有真正理解如何實現的遍歷的,又怎么遞歸。前幾天嘗試著自己寫一個遍歷樹結構 List,其實很簡單,所以能自己動手,決不要 copy。先記錄一個查詢,增、刪、改后續補上。
正文
實現思路
1
2
3
4
5
/** 從一個簡單的DTO文件開始 */
public class TestDTO {
// 自身 ID
private Long id;
// 名稱
private String name;
// 父節點 ID
private Long parentId;
// 子節點集合
private List children;
// 其他屬性
…
// setter and getter 方法
…
}
/** 實現類 */
@Service
public class TestServiceImpl implements TestService {
}
總結
以上是生活随笔為你收集整理的编写一个java类,用来表示出部队中 军 师 旅 团这种树状数据结构,使上级能检索到下级,下级也能检索到上级的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 特战旅php 视频_15个特战旅精锐大比
- 下一篇: 战队口号霸气押韵8字_枪战游戏战队名字大