`
hasi
  • 浏览: 58373 次
  • 性别: Icon_minigender_1
  • 来自: 北京(老家内蒙古)
社区版块
存档分类
最新评论

二维树型描述信息转换为内存中树型结构数据

阅读更多
把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);
}
}


希望大家提出意见,提高扩展性和执行效率
分享到:
评论
3 楼 dada 2006-11-13  
一般树操作扩展一下DefaultMutableTreeNode就足够了,里面有很多值得借鉴的写法。
2 楼 hasi 2006-11-13  
目前我只是想 把数据库里的信息映射为内存中的树结构,然后把这个树结构通过castor框架直接映射到XML文件。
其实用处不是很大,我也没有考虑树结点的增删问题,这些功能目前是通过这个数据库表对应的dao完成的,这里只是单向的mapping.
1 楼 SINCE1978 2006-11-13  
你的代码太笼统,只能表述个意思。

树的实现、框架上很简单、大致上就是:
一个节点node类(内含object值对象,这个值对象继承自某公共父抽象类,父类实现了同类对象值的比较、“大小”的比较等方法)
一个树tree类(仅持有root节点)

具体上就难了:
节点对象自身要有方法(以自身为根的子树内部增删改查节点的方法)
树对象也有增删改查方法(从根开始递归调用下层所有节点子树的增删改查)
我们仅仅持有树tree对象即可,因为数对象持有根节点对象,由JVM自身所维护的对象树我们可以遍历全树(类似于GC)。这样内存多叉树结构的实现就可以达成了。
如果是为了快速查找目的自平衡二叉树、甚至红黑树,似乎也可以用一个数组或链表来存储全部节点,节点存储顺序代表某个遍历序,据此维护节点对象的层次关系。也可以和多叉树一样。实现起来要对一些概念纯熟才行,比如红黑树节点的各种翻转、着色过程,这个比较复杂。

但是比较困惑的是内存树结构在实际当中能用上的地方不多。比较显著的好处就是可以提供一个免维护的统一的操作接口(也就是tree对象了)。而且即使用上效率未必比不用强。不用树结构,嵌套使用hashmap等JAVA集合对象,效率已经很高了。

相关推荐

    易语言数据表关联树型框

    4. 数据结构转换:理解如何将数据库或文件中的数据结构转换为适合在树型框或组合框中显示的形式。 5. 界面响应:编写代码处理用户与界面的交互,如点击事件、选择事件等。 6. 错误处理:编写适当的错误处理代码,...

    清华大学严蔚敏版数据结构讲义PPT

    例如,在电话号码查询系统中,数据结构可能是二维数组、表结构或向量,不同的数据结构会影响查找算法的选择和效率。数据结构还包括定义在这些结构上的运算,以及保证这些运算后结构不变的规则。 1.2 基本概念和术语...

    数据表转化成树形结构

    首先,我们需要了解数据库中的数据通常是二维表格形式,每行代表一个实体,列则表示实体的属性。而树形结构则是层次化的数据表示方式,每个节点可以有零个或多个子节点,呈现出父节点与子节点的上下级关系。 1. **...

    e语言-通用填充树型框模块

    资源介绍:可以根据需要添加树型框的总根节点 * 对易语言所支持的全部数据库都能进行填充 * 调用本模块之前,必须将数据库转换为二维数组,记录数作为数组的行, 填充的字段作为数组的列,填充源数组[记录数][填充...

    数据库填充到树型框例程.e.rar

    因此,可能需要将数据转换为树形结构,这可能涉及到递归函数或数据结构(如链表、树)的使用。 5. **树型控件**:在UI层面上,需要一个可以展示层次数据的控件,如Windows Forms中的TreeView或WPF的TreeView控件。...

    用SQL形成父子结点树结构的妙法.pdf

    这种做法极大地提高了程序的可靠性,因为它减少了程序在客户端处理复杂数据结构的压力,同时为树型关系数据的展示提供了一种新颖的方法。 综上所述,通过巧妙地运用数据库技术,尤其是在SQL语句的构造上下功夫,...

    数据结构习题

    - 数据结构不仅研究数据的逻辑结构和物理结构,还包括它们之间的转换方法以及相应的操作,答案选B。 **10. 计算机内部数据处理的基本单位是()。** - **知识点:数据处理基本单位** - 计算机内部数据处理的基本...

    数据结构实验报告

    实验可能涉及创建和操作一维、二维数组,理解数组的内存布局以及其时间复杂度。 2. **链表**:链表不同于数组,它的元素不连续存储,而是通过指针连接。链表分为单链表、双链表和循环链表等,实验可能包括插入、...

    vegaprime三维视景开发框架结构.pdf

    metaFlight的数据结构主要包括Ellipsoid ProjectedCoordSys nonProjectedCoordSysGridStructure Coverage SwitchDistanceTable GeometryGridDataset VirtualTextureDataset Common Attribute Database等几个部分。...

    易语言-通用填充树型框模块

    可以根据需要添加树型框的总根节点 * 对易语言所支持的全部数据库都能进行填充 * 调用本模块之前,必须将数据库转换为二维数组,记录数作为数组的行, 填充的字段作为数组的列,填充源数组[记录数][填充字段数],...

    数据库系统原理填空题

    14. **关系模型的特点**:关系模型使用二维表格来表示实体之间的联系,其中的关键码用于唯一标识表中的每一行记录。 15. **数据库维护的责任人**:数据库的维护工作通常由数据库管理员(DBA)承担。DBA负责监控...

    sqlserver数据库选填[参照].pdf

    用二维表格表示实体类型及实体间联系的数据模型称为关系模型。关系数据库是以关系模型为基础的数据库。关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。利用关系描述现实世界。一个关系既可以是一...

    2023年数据库原理知识点总结精华.docx

    数据库原理知识点总结精华 数据库系统概述 数据库系统是长期储存在计算机内、有组织的、可共享...层次模型用树型结构表达实体之间的联系,网状模型用图结构表达实体之间的联系,关系模型用二维表表达实体之间的联系。

    数据库原理知识点总结-精华.docx

    数据库系统管理数据的特点包括数据共享性高、冗余少、数据结构化、数据独立性高、由 DBMS 进行统一的数据控制功能等。 DBMS 可以对数据提供哪些控制功能?包括数据的安全性保护、数据的完整性检查、并发控制、...

    北京邮电大学数据库原理与应用阶段作业.docx

    涉及到数据库管理系统、关系数据库、实体关系模型、数据模型、数据独立性、数据冗余、数据共享性、数据库特点、数据结构化、数据访问速度、数据独立性、关系模型、树型结构、网状模型、层次模型、二维表、线性表、树...

    数据结构课程内容与典型题型

    在《数据结构》这门课程中,首先会介绍数据结构的基本概念以及其重要性。数据结构是计算机科学的一个核心概念,它涉及到如何组织和存储数据以提高计算效率。 **1. 数据结构定义** - **定义**:数据结构是指相互之间...

Global site tag (gtag.js) - Google Analytics