栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java自定义树形结构(仅限工作快速开发使用,非高深代码)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java自定义树形结构(仅限工作快速开发使用,非高深代码)

工作中碰到了树形结构的一些需求
  1. 提供节点为null值的存储
  2. 提供父节点的引用,且更新子节点时父节点所持有的子节点引用同步更新
  3. 提供查询当前节点所处高度,父节点所处高度
  4. 即时挂载父节点,更改父节点时,同步更新父节点的父节点引用信息,以及父节点的子节点引用信息
  5. 类似双向链表,对父项和子项信息的同步更新进行null值考虑,并对多线程操作时考虑一些节点拥有的属性的并发安全性问题
  6. 后续有需要会更新优化,如果有写的欠缺的地方,请读者在评论处指出
package com.xxxx;

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicInteger;

import org.springframework.util.CollectionUtils;

public class CommonNode {
	private T data;
	private CommonNode parentNode;
	private AtomicInteger currentNodeHeight;
	private AtomicInteger parentNodeHeight;
	private List> childCommonNodes;

	private  CommonNode() {
	}

	
	public CommonNode(final T data) {
		if (data != null) {
			this.setData(data);
		}
		this.currentNodeHeight = new AtomicInteger(0);
		this.parentNodeHeight = new AtomicInteger(-1);
	}

	
	public CommonNode(final T data, final CommonNode parentNode) {
		if (data != null) {
			this.setData(data);
		}
		if (parentNode != null) {
			this.setParentNode(parentNode);
		} else {
			this.currentNodeHeight = new AtomicInteger(0);
			this.parentNodeHeight = new AtomicInteger(-1);
		}
	}

	public void setData(final T data) {
		this.data = data;
	}

	public T getData() {
		return data;
	}

	public void setParentNode(final CommonNode parentNode) {
		// 之前连接的如果有父节点,需要把父节点中持有的引用删掉
		CommonNode beforeAddParentNode = this.getParentNode();
		if (beforeAddParentNode != null) {
			List> beforeAddChildCommonNodes = beforeAddParentNode.getChildCommonNodes();
			if (!CollectionUtils.isEmpty(beforeAddChildCommonNodes)) {
				beforeAddChildCommonNodes.remove(this);
			}
		} else {
			List> curCommonNodes = parentNode.getChildCommonNodes();
			if (curCommonNodes == null) {
				curCommonNodes = new CopyOnWriteArrayList<>();
				parentNode.setChildCommonNodes(curCommonNodes);
			}
			curCommonNodes.add(this);

		}

		this.parentNode = parentNode;
		this.parentNodeHeight = parentNode.getCurrentNodeHeight();
		this.currentNodeHeight = new AtomicInteger(parentNode.getCurrentNodeHeight().get()+1);
	}

	public AtomicInteger getCurrentNodeHeight() {
		return currentNodeHeight;
	}

	private void setCurrentNodeHeight(final AtomicInteger newCurrentNodeHeight) {
		currentNodeHeight = newCurrentNodeHeight;
	}

	public CommonNode getParentNode() {
		return parentNode;
	}

	public AtomicInteger getParentNodeHeight() {
		return parentNodeHeight;
	}

	private void setParentNodeHeight(final AtomicInteger newParentNodeHeight) {
		parentNodeHeight = newParentNodeHeight;
	}

	public List> getChildCommonNodes() {
		return childCommonNodes;
	}

	public void setChildCommonNodes(final List> newChildCommonNodes) {
		childCommonNodes = newChildCommonNodes;
	}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/357674.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号