最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java編程兩種樹形菜單結(jié)構(gòu)的轉(zhuǎn)換代碼

 更新時間:2017年12月07日 14:29:23   作者:zhangzeyuaaa  
這篇文章主要介紹了java編程兩種樹形菜單結(jié)構(gòu)的轉(zhuǎn)換代碼,首先介紹了兩種樹形菜單結(jié)構(gòu)的代碼,然后展示了轉(zhuǎn)換器實例代碼,最后分享了相關(guān)實例及結(jié)果演示,具有一定借鑒價值,需要的朋友可以了解下。

首先看看兩種樹形菜單結(jié)構(gòu)的代碼示例。

SingleTreeNode:

package com.zzj.tree;
public class SingleTreeNode {
	private int id;
	private int pId;
	private String name;
	public SingleTreeNode() {
	}
	public SingleTreeNode(int id, int pId, String name) {
		this.id = id;
		this.pId = pId;
		this.name = name;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public int getpId() {
		return pId;
	}
	public void setpId(int pId) {
		this.pId = pId;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override 
	  public String toString() {
		return "SingleTreeNode [id=" + id + ", pId=" + pId + ", name=" + name + "]";
	}
}

這種結(jié)構(gòu)很適合存儲到關(guān)系型數(shù)據(jù)庫中。

MultiTreeNode:

package com.zzj.tree;
import java.util.List;
public class MultiTreeNode {
	private int id;
	private String name;
	private List<MultiTreeNode> children;
	public MultiTreeNode() {
	}
	public MultiTreeNode(int id, String name) {
		this.id = id;
		this.name = name;
	}
	public MultiTreeNode(int id, String name, List<MultiTreeNode> children) {
		this.id = id;
		this.name = name;
		this.children = children;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public List<MultiTreeNode> getChildren() {
		return children;
	}
	public void setChildren(List<MultiTreeNode> children) {
		this.children = children;
	}
	@Override 
	  public String toString() {
		return "MultiTreeNode [id=" + id + ", name=" + name + ", children=" + children + "]";
	}
}

兩種轉(zhuǎn)換器

ToMultiTreeTransformer:

package com.zzj.tree;
import java.util.ArrayList;
import java.util.List;
public class ToMultiTreeTransformer {
	private List<SingleTreeNode> singleTreeNodes;
	private List<MultiTreeNode> multiTreeNodes = new ArrayList<>();
	public ToMultiTreeTransformer(List<SingleTreeNode> singleTreeNodes) {
		this.singleTreeNodes = singleTreeNodes;
	}
	public List<MultiTreeNode> transform(){
		// 先找出所有的根節(jié)點 
		for (int i = 0; i < singleTreeNodes.size(); i++) {
			SingleTreeNode singleTreeNode = singleTreeNodes.get(i);
			Boolean isRoot = true;
			for (int j = 0; j < singleTreeNodes.size(); j++) {
				SingleTreeNode temp = singleTreeNodes.get(j);
				if (singleTreeNode.getpId() == temp.getId()) {
					isRoot = false;
					break;
				}
			}
			if (isRoot) {
				MultiTreeNode multiTreeNode = new MultiTreeNode(singleTreeNode.getId(),  
				            singleTreeNode.getName());
				multiTreeNodes.add(multiTreeNode);
			}
		}
		// 設(shè)置子節(jié)點 
		for (int i = 0; i < multiTreeNodes.size(); i++) {
			MultiTreeNode multiTreeNode = multiTreeNodes.get(i);
			setChildren(multiTreeNode);
		}
		return multiTreeNodes;
	}
	/** 
   * 設(shè)置子節(jié)點 
   * @param multiTreeNode 
   */
	private void setChildren(MultiTreeNode multiTreeNode){
		for (int j = 0; j < singleTreeNodes.size(); j++) {
			SingleTreeNode temp = singleTreeNodes.get(j);
			if (temp.getpId() == multiTreeNode.getId()) {
				MultiTreeNode child = new MultiTreeNode(temp.getId(),  
				            temp.getName());
				List<MultiTreeNode> children = multiTreeNode.getChildren();
				if (children == null) {
					children = new ArrayList<>();
					multiTreeNode.setChildren(children);
				}
				children.add(child);
				setChildren(child);
			}
		}
	}
}

ToSingleTreeTransformer:

package com.zzj.tree;
import java.util.ArrayList;
import java.util.List;
public class ToSingleTreeTransformer {
	private List<MultiTreeNode> multiTreeNodes;
	private List<SingleTreeNode> singleTreeNodes = new ArrayList<>();
	public ToSingleTreeTransformer(List<MultiTreeNode> multiTreeNodes) {
		this.multiTreeNodes = multiTreeNodes;
	}
	public List<SingleTreeNode> transform(){
		// 先獲取根節(jié)點 
		for (int i = 0; i < multiTreeNodes.size(); i++) {
			MultiTreeNode multiTreeNode = multiTreeNodes.get(i);
			SingleTreeNode singleTreeNode = new SingleTreeNode(multiTreeNode.getId(),  
			          0, multiTreeNode.getName());
			singleTreeNodes.add(singleTreeNode);
		}
		// 獲取子節(jié)點 
		for (int i = 0; i < multiTreeNodes.size(); i++) {
			MultiTreeNode multiTreeNode = multiTreeNodes.get(i);
			getChildren(multiTreeNode);
		}
		return singleTreeNodes;
	}
	/** 
   * 獲取子節(jié)點 
   * @param multiTreeNode 
   */
	private void getChildren(MultiTreeNode multiTreeNode){
		for (int i = 0; i < singleTreeNodes.size(); i++) {
			SingleTreeNode temp = singleTreeNodes.get(i);
			if (multiTreeNode.getId() == temp.getId()) {
				List<MultiTreeNode> children = multiTreeNode.getChildren();
				if (children != null) {
					for (int j = 0; j < children.size(); j++) {
						MultiTreeNode child = children.get(j);
						SingleTreeNode singleTreeNode = new SingleTreeNode(child.getId(),  
						                multiTreeNode.getId(), child.getName());
						singleTreeNodes.add(singleTreeNode);
						getChildren(child);
					}
				}
			}
		}
	}
}

測試

package com.zzj.tree;
import java.util.ArrayList;
import java.util.List;
public class TreeTransformerTest {
	private final static List<SingleTreeNode> SINGLE_TREE = new ArrayList<SingleTreeNode>();
	static {
		SingleTreeNode China = new SingleTreeNode(1, 0, "中國");
		SINGLE_TREE.add(China);
		SingleTreeNode Hunan = new SingleTreeNode(2, 1, "湖南");
		SINGLE_TREE.add(Hunan);
		SingleTreeNode Changsha = new SingleTreeNode(3, 2, "長沙");
		SINGLE_TREE.add(Changsha);
		SingleTreeNode Hubei = new SingleTreeNode(4, 1, "湖北");
		SINGLE_TREE.add(Hubei);
		SingleTreeNode Wuhan = new SingleTreeNode(5, 4, "武漢");
		SINGLE_TREE.add(Wuhan);
		SingleTreeNode America = new SingleTreeNode(6, 0, "美國");
		SINGLE_TREE.add(America);
		SingleTreeNode California = new SingleTreeNode(7, 6, "加利福尼亞");
		SINGLE_TREE.add(California);
		SingleTreeNode LosAngeles = new SingleTreeNode(8, 7, "洛杉磯");
		SINGLE_TREE.add(LosAngeles);
	}
	public static void main(String[] args) throws Exception {
		ToMultiTreeTransformer multiTreeTransformer = new ToMultiTreeTransformer(SINGLE_TREE);
		List<MultiTreeNode> multiTreeNodes = multiTreeTransformer.transform();
		System.out.println(multiTreeNodes);
		ToSingleTreeTransformer singleTreeTransformer = new ToSingleTreeTransformer(multiTreeNodes);
		List<SingleTreeNode> singleTreeNodes = singleTreeTransformer.transform();
		System.out.println(singleTreeNodes);
	}
}

輸出結(jié)果:

[MultiTreeNode [id=1, name=中國, children=[MultiTreeNode [id=2, name=湖南, children=[MultiTreeNode [id=3, name=長沙, children=null]]], MultiTreeNode [id=4, name=湖北, children=[MultiTreeNode [id=5, name=武漢, children=null]]]]], MultiTreeNode [id=6, name=美國, children=[MultiTreeNode [id=7, name=加利福尼亞, children=[MultiTreeNode [id=8, name=洛杉磯, children=null]]]]]] 
[SingleTreeNode [id=1, pId=0, name=中國], SingleTreeNode [id=6, pId=0, name=美國], SingleTreeNode [id=2, pId=1, name=湖南], SingleTreeNode [id=3, pId=2, name=長沙], SingleTreeNode [id=4, pId=1, name=湖北], SingleTreeNode [id=5, pId=4, name=武漢], SingleTreeNode [id=7, pId=6, name=加利福尼亞], SingleTreeNode [id=8, pId=7, name=洛杉磯]] 

總結(jié)

以上就是本文關(guān)于java編程兩種樹形菜單結(jié)構(gòu)的轉(zhuǎn)換代碼的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:

Java實現(xiàn)生成Excel樹形表頭完整代碼示例

Java語言描述二叉樹的深度和寬度

java算法實現(xiàn)紅黑樹完整代碼示例

如有不足之處,歡迎留言指出!

相關(guān)文章

  • Java中刪除文件或文件夾的幾種方法總結(jié)

    Java中刪除文件或文件夾的幾種方法總結(jié)

    這篇文章主要介紹了Java中刪除文件或文件夾的幾種方法總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Java數(shù)據(jù)結(jié)構(gòu)(線性表)詳解

    Java數(shù)據(jù)結(jié)構(gòu)(線性表)詳解

    本文主要介紹了Java數(shù)據(jù)結(jié)構(gòu)(線性表)的相關(guān)知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • IDEA無法識別SpringBoot項目的簡單解決辦法

    IDEA無法識別SpringBoot項目的簡單解決辦法

    今天使用idea的時候,遇到idea無法啟動springboot,所以這篇文章主要給大家介紹了關(guān)于IDEA無法識別SpringBoot項目的簡單解決辦法,需要的朋友可以參考下
    2023-08-08
  • Java編寫簡單計算器的完整實現(xiàn)過程

    Java編寫簡單計算器的完整實現(xiàn)過程

    這篇文章主要給大家介紹了關(guān)于Java編寫簡單計算器的完整實現(xiàn)過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java多線程之CAS機(jī)制詳解

    Java多線程之CAS機(jī)制詳解

    這篇文章主要介紹了Java多線程之CAS機(jī)制詳解,CAS指的是Compare-And-Swap(比較與交換),它是一種多線程同步的技術(shù),常用于實現(xiàn)無鎖算法,從而提高多線程程序的性能和擴(kuò)展性,需要的朋友可以參考下
    2023-07-07
  • java中如何實現(xiàn) zip rar 7z 壓縮包解壓

    java中如何實現(xiàn) zip rar 7z 壓縮包解壓

    這篇文章主要介紹了java中如何實現(xiàn) zip rar 7z 壓縮包解壓問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java  中橋接模式——對象結(jié)構(gòu)型模式的實例詳解

    Java 中橋接模式——對象結(jié)構(gòu)型模式的實例詳解

    這篇文章主要介紹了Java 中橋接模式——對象結(jié)構(gòu)型模式的實例詳解的相關(guān)資料,希望通過本文大家能掌握這部分知識,需要的朋友可以參考下
    2017-09-09
  • JVM之內(nèi)存分配和回收機(jī)制

    JVM之內(nèi)存分配和回收機(jī)制

    本篇主要介紹JVM內(nèi)存分配和回收策略,內(nèi)容主要節(jié)選自《深入理解java虛擬機(jī)》,需要的朋友可以參考下
    2023-05-05
  • java 判斷一個數(shù)是否為2的整數(shù)次冪方法

    java 判斷一個數(shù)是否為2的整數(shù)次冪方法

    今天小編就為大家分享一篇java 判斷一個數(shù)是否為2的整數(shù)次冪方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • sonar-scanner連接sonarquebe7的sonar.java.binaries問題的解決方案

    sonar-scanner連接sonarquebe7的sonar.java.binaries問題的解決方案

    今天小編就為大家分享一篇關(guān)于sonar-scanner連接sonarquebe7的sonar.java.binaries問題的解決方案,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12

最新評論

于都县| 南郑县| 六枝特区| 宜良县| 临漳县| 固阳县| 务川| 长宁县| 梓潼县| 方城县| 大城县| 富宁县| 双峰县| 龙川县| 阿城市| 贺州市| 宁化县| 凤翔县| 沈阳市| 夹江县| 唐海县| 宜章县| 威海市| 论坛| 荆州市| 墨玉县| 绥芬河市| 晴隆县| 安陆市| 祁阳县| 林甸县| 龙山县| 泾川县| 巴林右旗| 理塘县| 山西省| 思南县| 北票市| 青岛市| 韶山市| 井研县|