求大量数据带CHECKBOX的树型目录的代码或算法

python与大数据分析
领域专家: 数据库技术领域
2004-09-25 04:36:18
有一棵权限树,大概有两千多个子节点.最高层次可达4层,但是效率奇低,完全读出来需要将近一分钟时间.点击任何一个节点响应时间都有好几秒钟.
目前的做法是通过JSP页面获取数据库数据,然后通过递归方式输出,数据库数据时间可以忽略不计,构建这棵树的时间太长了.
其次,点击任何一个节点均须扫描所有节点,所以响应时间太慢.
不知道各位能不能提供一些切实可行的办法.
...全文
207 8 打赏 收藏 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
baffling 2004-11-24
  • 打赏
  • 举报
回复
gz
fengying3 2004-09-25
  • 打赏
  • 举报
回复
我是新手,谈谈我的做法:
首先将数据从数据库中取出来缓存,在需要构建树的地方从缓存的数据中取出需要的数据构成一个树对象。显示的时候遍历这个树对象就可以了,关于数据库同步问题自己可以加入控制。

另外,在生成树对象时,最好用一个属性记录下树的层次关系,比如:第一级是001、002......第二级的就是001001、001002、002001、002002.......依次类推。

有一段代码,但不是很通用,感兴趣的可以改写到通用一点。

这是构建树对象的。
public class UserDataModel {

Log log = LogFactory.getLog(UserDataModel.class);
private GroupService groupService=(GroupService)ContainerManager.getComponent("groupService");
private UserService userService=(UserService)ContainerManager.getComponent("userService");

public UserDataModel() {
}

public GroupNode getUserDataModel(int unitId){
return constrution(unitId);
}
public synchronized GroupNode constrution(int unitId){
if (unitId<0) {
log.info("avalid unitId: "+unitId);
return null;
}
List groups=groupService.getAllUnitGroup(unitId);
List users=userService.getUnitUsers(unitId);
if (groups==null || groups.size()==0) {
log.info("no group in this unit: "+unitId);
return null;
}
if (users==null || users.size()==0) {
log.info("no user in this unit: "+unitId);
return null;
}
GroupNode root=getGroupTree(groups);
root=dealUsers(root,users);
return root;
}

private GroupNode getGroupTree(List groups){
GroupNode root=new GroupNode("G0","用户列表树根");
root.setPos("000");
for (Iterator iter = groups.iterator(); iter.hasNext(); ) {
GroupDto item = (GroupDto)iter.next();
GroupNode gnode=new GroupNode(item);
root.addChild(gnode);
}
if (root.getChildren().size()<=0) {
log.info("no groups in this system!");
return root;
}
for (Iterator iter = groups.iterator(); iter.hasNext(); ) {
GroupDto item = (GroupDto)iter.next();
String selfKey="G"+String.valueOf(item.getId());
String key="G"+String.valueOf(item.getParentId());
GroupNode gnode=(GroupNode)root.getChildren().get(selfKey);
if (item.getParentId()<1) {
//root.addChild(gnode);
continue;
}
GroupNode parentNode=getGroupNode(root,key);
if (parentNode==null) {
log.info("no parent group to finded, id is :"+key);
continue;
}
root.getChildren().remove(selfKey);
parentNode.addChild(gnode);
}
return root;
}

private GroupNode getGroupNode(GroupNode root,String key){
if (root==null || key ==null ){
log.info("root is null or key is null!");
return null;
}
Map groups=root.getChildren();
GroupNode reNode=null;
if (groups.get(key)!=null )
return (GroupNode)groups.get(key);
else {
for (Iterator iter = groups.values().iterator(); iter.hasNext(); ) {
BaseNode bNode = (BaseNode) iter.next();
if (bNode instanceof GroupNode) {
GroupNode item = (GroupNode)bNode;
reNode = getGroupNode(item, key);
if (reNode != null)
return reNode;
}
}
}
return null;
}

private GroupNode dealUsers(GroupNode root,List users){
if (root==null || users==null ){
log.info("no group or user ");
}
for (Iterator iter = users.iterator(); iter.hasNext(); ) {
UserDto item = (UserDto)iter.next();
if (item.getUserType()!=2) continue;
UserNode unode=new UserNode(item);
int groupId=item.getGroupId();
if (groupId<1) {
root.addChild(unode);
continue;
}
String key="G"+String.valueOf(item.getGroupId());
GroupNode gnode=getGroupNode(root,key);
if (gnode==null) {
log.info("no groupnode for this id: "+key);
continue;
}
gnode.addChild(unode);
}
return root;
}


有了这个对象,遍历一下就可以显示出树来了。
lmfweng 2004-09-25
  • 打赏
  • 举报
回复
UP
wbwb3448 2004-09-25
  • 打赏
  • 举报
回复
就是只扫描一个接点下的数据?
朋友别哭 2004-09-25
  • 打赏
  • 举报
回复
up
禽兽v5 2004-09-25
  • 打赏
  • 举报
回复
代码我记得1年前大把。
禽兽v5 2004-09-25
  • 打赏
  • 举报
回复
普通方式效率肯定低。学csdn吧,用xmlhttp。
tanyun1111 2004-09-25
  • 打赏
  • 举报
回复
up
源码链接: https://pan.quark.cn/s/9f500ac403c2 摄像头配置是嵌入式系统构建中的一个关键步骤,它涉及到硬件与软件的紧密协作。图像信号处理器(ISP)作为图像信号处理的核心单元,在摄像头配置过程中扮演着至关重要的角色。在硬件层面,它涵盖了摄像头与ISP之间的连接以及信号传输的细节;在软件层面,主要依托V4L2框架进行视频流的采集和处理。接下来将具体说明文档中涉及的硬件机制、软件机制、信号配置及V4L2等领域的摄像头配置实践经验。 ### 硬件机制与连接 文档首先阐述了硬件线路中中央处理器与摄像头之间的连接方式。在此,相机串行接口(CSI)模块是摄像头数据传输的核心部分,它负责与外部CMOS图像感应元件进行交互。CSI接口包含以下几个关键信号线: 1. **CSI_VSYNC (垂直同步信号)**:用于标示一帧图像的起始点。该信号传输方向为从图像感应元件(sensor)至应用处理器(AP)。 2. **CSI_HSYNC (水平同步信号)**:用于提供行同步信号,并用于识别消隐信号。同样,信号流向为sensor至AP。 3. **CSI_D[7:0]**:8位摄像头数据总线,用于传输各种图像数据,包括YUV、YCC、RGB或Bayer格式。数据流向为sensor至AP。 4. **CSI_MCLK (传感器主时钟信号)**:由传感器输出主时钟信号,为外部摄像头提供时钟基准。信号流向为AP至sensor。 5. **CSI_PIXCLK (像素时钟信号)**:由摄像头输出,通常与MCLK主时钟信号频率相同。信号流向为sensor至AP。 正确设置这些连接,确保信号同步传输,是硬件配置的基础。 ### 软件机制与驱动程序 摄像头驱动...
文末附数据集可视化效果图。 【数据集概况】 · 检测类别(中文):[大豆(soybean)] · 训练集:777 张 · 验证集:0 张 · 测试集:0 张 · 总计:777 张 该数据集聚焦农业科研领域,针对温室环境下大豆幼苗的精准检测需求,为植物生长监测与自动化管理提供高质量数据支撑。训练集777张,验证集和测试集为0张,符合农业科研场景中对特定生长阶段样本集中训练的需求,确保模型在目标场景下的泛化能力。所有样本均采用精准的边界框标注,标注规范统一,确保了数据集在大豆幼苗检测任务中的高精度与可靠性。该数据集可应用于农业科研机构的植物生长监测系统、智能温室管理平台等场景,... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 100 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9922** mAP50-95 | 0.9141 Precision | 0.9771 Recall | 0.9710 train/box_loss | 0.4231 train/cls_loss | 0.1829 val/box_loss | 0.3920 val/cls_loss | 0.1737 【训练过程分析】 100 轮训练后 mAP50 达到 0.9922,模型收敛良好。Loss 曲线前段快速下降,后段趋于平稳,val_loss 无反弹,没有明显过拟合。mAP50-95 为 0.9141,和 mAP50 差距仅 0.08,框的定位精度也很扎实。 【模型性能评估】 Precision 0.9771、Recall 0.9710,精召双高,模型对大豆的检测能力强。...

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧