把id , parentId , name , url 结构的二维信息转换为内存中的树型结构对象
java类:
Node为容器接口,定义容器的规则
TreeNode为Node容器的实现类,有自己内部的存储结构
NodeService为对容器操作的接口
NodeLoader类通过NodeService类填充容器数据
public interface Node {
public String getId();
public String getParentId();
public Node[] getChild();
public Object getValue();
public void setId(String id);
public void setParentId(String parentId);
public void setChildNode(Node[] childNode);
public void setValue(Object object);
}
public class TreeNode implements Node {
private String id;
private String parentId;
private Node[] childNode;
private Object value;
//geters, setters methods
}
public interface NodeService {
public Node getRoot();
public Node[] getChild(Node node);
}
public class NodeLoader {
NodeService nodeService ;
public Node load(NodeService nodeService) {
this.nodeService = nodeService ;
Node node = nodeService.getRoot();
setChild(node);
return node;
}
private void setChild(Node node) {
Node[] childNode = nodeService.getChild(node);
node.setChildNode(childNode);
if (null == childNode) {
return;
}
for (int i = 0; i < childNode.length; i++) {
setChild(childNode[i]);
}
}
}
以菜单树型结构数据为例
Menu为具体的数据结构,作为Node的Object类型的value
MenuNodeService为NodeService接口的实现
public class Menu {
private String name ;
private String url ;
private String description ;
private String order ;
//geters, setters methods
public class MenuNodeService implements NodeService{
public Node getRoot(){
Node rnode = MenuDao.getRootNode();
return rnode ;
}
public Node[] getChild(Node node){
Node[] rnodes = MenuDao.getChildNode(Node node);
return rnodes ;
}
}
测试代码
public class TestMenuTree {
public static void main(String[] args){
NodeLoader loader = new NodeLoader();
NodeService nodeSerive = new MenuNodeService();
Node node =loader.load(nodeSerive);
print(node);
}
public static void print(Node node){
if(node.getChild() == null || node.getChild().length == 0) return ;
for(int i = 0 ; i<node.getChild().length ; i ++){
log(((Menu)(node.getChild()[i].getValue())).getName());
print(node.getChild()[i]);
}
}
public static void log(String s){
System.out.println(s);
}
}
希望大家提出意见,提高扩展性和执行效率
分享到:
相关推荐
4. 数据结构转换:理解如何将数据库或文件中的数据结构转换为适合在树型框或组合框中显示的形式。 5. 界面响应:编写代码处理用户与界面的交互,如点击事件、选择事件等。 6. 错误处理:编写适当的错误处理代码,...
例如,在电话号码查询系统中,数据结构可能是二维数组、表结构或向量,不同的数据结构会影响查找算法的选择和效率。数据结构还包括定义在这些结构上的运算,以及保证这些运算后结构不变的规则。 1.2 基本概念和术语...
首先,我们需要了解数据库中的数据通常是二维表格形式,每行代表一个实体,列则表示实体的属性。而树形结构则是层次化的数据表示方式,每个节点可以有零个或多个子节点,呈现出父节点与子节点的上下级关系。 1. **...
资源介绍:可以根据需要添加树型框的总根节点 * 对易语言所支持的全部数据库都能进行填充 * 调用本模块之前,必须将数据库转换为二维数组,记录数作为数组的行, 填充的字段作为数组的列,填充源数组[记录数][填充...
因此,可能需要将数据转换为树形结构,这可能涉及到递归函数或数据结构(如链表、树)的使用。 5. **树型控件**:在UI层面上,需要一个可以展示层次数据的控件,如Windows Forms中的TreeView或WPF的TreeView控件。...
这种做法极大地提高了程序的可靠性,因为它减少了程序在客户端处理复杂数据结构的压力,同时为树型关系数据的展示提供了一种新颖的方法。 综上所述,通过巧妙地运用数据库技术,尤其是在SQL语句的构造上下功夫,...
- 数据结构不仅研究数据的逻辑结构和物理结构,还包括它们之间的转换方法以及相应的操作,答案选B。 **10. 计算机内部数据处理的基本单位是()。** - **知识点:数据处理基本单位** - 计算机内部数据处理的基本...
实验可能涉及创建和操作一维、二维数组,理解数组的内存布局以及其时间复杂度。 2. **链表**:链表不同于数组,它的元素不连续存储,而是通过指针连接。链表分为单链表、双链表和循环链表等,实验可能包括插入、...
metaFlight的数据结构主要包括Ellipsoid ProjectedCoordSys nonProjectedCoordSysGridStructure Coverage SwitchDistanceTable GeometryGridDataset VirtualTextureDataset Common Attribute Database等几个部分。...
可以根据需要添加树型框的总根节点 * 对易语言所支持的全部数据库都能进行填充 * 调用本模块之前,必须将数据库转换为二维数组,记录数作为数组的行, 填充的字段作为数组的列,填充源数组[记录数][填充字段数],...
14. **关系模型的特点**:关系模型使用二维表格来表示实体之间的联系,其中的关键码用于唯一标识表中的每一行记录。 15. **数据库维护的责任人**:数据库的维护工作通常由数据库管理员(DBA)承担。DBA负责监控...
用二维表格表示实体类型及实体间联系的数据模型称为关系模型。关系数据库是以关系模型为基础的数据库。关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。利用关系描述现实世界。一个关系既可以是一...
数据库原理知识点总结精华 数据库系统概述 数据库系统是长期储存在计算机内、有组织的、可共享...层次模型用树型结构表达实体之间的联系,网状模型用图结构表达实体之间的联系,关系模型用二维表表达实体之间的联系。
数据库系统管理数据的特点包括数据共享性高、冗余少、数据结构化、数据独立性高、由 DBMS 进行统一的数据控制功能等。 DBMS 可以对数据提供哪些控制功能?包括数据的安全性保护、数据的完整性检查、并发控制、...
涉及到数据库管理系统、关系数据库、实体关系模型、数据模型、数据独立性、数据冗余、数据共享性、数据库特点、数据结构化、数据访问速度、数据独立性、关系模型、树型结构、网状模型、层次模型、二维表、线性表、树...
在《数据结构》这门课程中,首先会介绍数据结构的基本概念以及其重要性。数据结构是计算机科学的一个核心概念,它涉及到如何组织和存储数据以提高计算效率。 **1. 数据结构定义** - **定义**:数据结构是指相互之间...