1、優化算法下的樹結構遍歷 html
// 1、優化算法下的樹結構遍歷 @SuppressWarnings("unchecked") public String gainTreeFolder() { // 1 設置虛擬根節點 root = new Folders(); root.setFolderId(MyConstants.ID); root.setFolderName("頂部"); // 2查詢該節點下的樹形結構的數據. List<Folders> fileList = filesService.queryList("Folders", "queryAll", root); Map map = new TreeMap<String, Folders>(); Folders tempTree; // 3 將list中元素放入map.其中主鍵爲key. Folders subRoot = null; for (int i = 0; fileList != null && i < fileList.size(); i++) { tempTree = fileList.get(i); map.put(tempTree.getId(), tempTree); if (MyConstants.ID.equals(tempTree.getParentId())) { subRoot = tempTree; root.getChildren().add(subRoot); } } // 4 循環。將循環中的節點,添加到上一級節點中。 for (int i = 0; fileList != null && i < fileList.size(); i++) { tempTree = fileList.get(i); Folders t = (Folders) map.get(tempTree.getParentId()); if (t != null) { t.getChildren().add(tempTree); map.put(tempTree.getParentId(), t); } } // 5返回root. return SUCCESS; }
2、原有算法 java
// 加載文件夾結構圖 @SuppressWarnings("unchecked") public String loadFoldersMap() { logger.info("開始文件夾結構圖"); // 1 設置根節點 root = new Folders(); root.setFolderId(MyConstants.ID); root.setParentId(MyConstants.PARENTID); root.setFolderName("頂部"); root.setOwnerType((short) 9); // 2查詢該節點下的樹形結構的數據. List<Folders> fileList = filesService.queryList("Folders", "queryAll", root); // 3 循環將下級節點數據添加進來 ConcurrentLinkedQueue<Folders> newList = new ConcurrentLinkedQueue<Folders>(); newList.addAll(fileList); getList(root, newList); return SUCCESS; } public void getList(Folders files, ConcurrentLinkedQueue<Folders> fileLists) { List<Folders> sublist = new ArrayList<Folders>(); if (!MyUtils.isEmpty(fileLists)) { for (Iterator<Folders> iterator = fileLists.iterator(); iterator.hasNext();) { Folders temp = (Folders) iterator.next(); if (MyUtils.equals(temp.getParentId(), files.getFolderId())) { sublist.add(temp); iterator.remove(); getList(temp, fileLists); } } } files.setChildren(sublist); }
---------------------------------以上來自徐亮Bright的博客 --------------------------------- 算法
public List<PageSysMenu> ss(List<PageSysMenu> fileList) { List<PageSysMenu> l = new ArrayList<PageSysMenu>(); for (Iterator<PageSysMenu> iterator = fileList.iterator(); iterator.hasNext();) { PageSysMenu psm = iterator.next(); if (StringUtils.isBlank(psm.getParentId())) { l.add(psm); iterator.remove(); } } for (PageSysMenu psm : l) { Map<String, PageSysMenu> map = new TreeMap<String, PageSysMenu>(); PageSysMenu _psm; // 3 將list中元素放入map.其中主鍵爲key. for (Iterator<PageSysMenu> iterator = fileList.iterator(); iterator.hasNext();) { _psm = iterator.next(); map.put(_psm.getId(), _psm); if (psm.getId().equals(_psm.getParentId())) { psm.getChildren().add(_psm); iterator.remove(); } } // 4 循環。將循環中的節點,添加到上一級節點中。 for (Iterator<PageSysMenu> iterator = fileList.iterator(); iterator.hasNext();) { _psm = iterator.next(); PageSysMenu t = map.get(_psm.getParentId()); if (t != null) { t.getChildren().add(_psm); map.put(_psm.getParentId(), t); iterator.remove(); } } } System.out.println(JSON.toJSONString(l)); return l; }
SQL sql
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `sys_menu` -- ---------------------------- DROP TABLE IF EXISTS `sys_menu`; CREATE TABLE `sys_menu` ( `id` varchar(32) NOT NULL COMMENT 'id', `pid` varchar(32) DEFAULT NULL COMMENT 'pid', `name` varchar(50) NOT NULL COMMENT 'name', `type` varchar(50) DEFAULT NULL COMMENT 'type', `icon` varchar(50) DEFAULT NULL COMMENT 'icon', `link` varchar(200) DEFAULT NULL COMMENT 'link', `path` varchar(50) DEFAULT NULL COMMENT 'path', `tag` varchar(50) DEFAULT NULL COMMENT 'tag', `module` varchar(50) DEFAULT NULL COMMENT 'module', `order_num` int(11) DEFAULT NULL COMMENT 'order_num', `isEnabled` char(1) DEFAULT NULL COMMENT 'isEnabled', `create_by` varchar(32) NOT NULL COMMENT 'create_by', `create_date` datetime NOT NULL COMMENT 'create_date', `update_by` varchar(32) NOT NULL COMMENT 'update_by', `update_date` datetime NOT NULL COMMENT 'update_date', `remarks` varchar(200) DEFAULT NULL COMMENT 'remark', `del_flag` char(1) NOT NULL COMMENT 'del_flag', PRIMARY KEY (`id`), KEY `FK_FK_sysMenu_sysMenu` (`pid`), CONSTRAINT `FK_FK_sysMenu_sysMenu` FOREIGN KEY (`pid`) REFERENCES `sys_menu` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='sys_menu'; -- ---------------------------- -- Records of sys_menu -- ---------------------------- INSERT INTO `sys_menu` VALUES ('menu001', null, 'menu1', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0'); INSERT INTO `sys_menu` VALUES ('menu002', 'menu001', 'menu1-1', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0'); INSERT INTO `sys_menu` VALUES ('menu003', 'menu002', 'menu1-1-1', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0'); INSERT INTO `sys_menu` VALUES ('menu004', 'menu003', 'menu1-1-1-1', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0'); INSERT INTO `sys_menu` VALUES ('menu005', 'menu005', 'menu1-1-1-1-1', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0'); INSERT INTO `sys_menu` VALUES ('menu006', 'menu002', 'menu1-1-2', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0'); INSERT INTO `sys_menu` VALUES ('menu007', 'menu001', 'menu1-2', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0'); INSERT INTO `sys_menu` VALUES ('menu008', null, 'menu2', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0'); INSERT INTO `sys_menu` VALUES ('menu009', 'menu008', 'menu2-1', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0'); INSERT INTO `sys_menu` VALUES ('menu010', 'menu009', 'menu2-1-1', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0'); INSERT INTO `sys_menu` VALUES ('menu011', 'menu009', 'menu2-1-2', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0'); INSERT INTO `sys_menu` VALUES ('menu012', 'menu008', 'menu2-2', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0'); INSERT INTO `sys_menu` VALUES ('menu013', 'menu008', 'menu2-3', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0'); INSERT INTO `sys_menu` VALUES ('menu014', null, 'menu3', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0'); INSERT INTO `sys_menu` VALUES ('menu015', 'menu014', 'menu3-1', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0'); INSERT INTO `sys_menu` VALUES ('menu016', 'menu014', 'menu3-2', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0'); INSERT INTO `sys_menu` VALUES ('menu017', 'menu014', 'menu3-3', null, null, null, null, null, null, null, null, 'admin', '2015-09-21 18:10:18', 'admin', '2015-09-21 18:10:21', null, '0');