Package org.miaixz.bus.core.center.map
Class LinkedForestMap<K,V>
java.lang.Object
org.miaixz.bus.core.center.map.LinkedForestMap<K,V>
- Type Parameters:
K- key类型V- 值类型
ForestMap的基本实现。
该集合可以被视为以LinkedForestMap.TreeEntryNode.getKey()作为key,LinkedForestMap.TreeEntryNode实例作为value的LinkedHashMap。
使用时,将每一对键与值对视为一个LinkedForestMap.TreeEntryNode节点,节点的id即为LinkedForestMap.TreeEntryNode.getKey(), 任何情况下使用相同的key都将会访问到同一个节点。
节点通过key形成父子关系,并最终构成多叉树结构,多组平行的多叉树将在当前集合中构成森林。 使用者可以通过ForestMap本身的方法来对森林进行操作或访问,
也可以在获取到TreeEntry后,使用节点本身的方法对数进行操作或访问。
- Since:
- Java 17+
- Author:
- Kimi Liu
-
Nested Class Summary
Nested Classes -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidclear()将当前集合清空,并清除全部节点间的引用关系booleancontainsKey(Object key) 当前实例中是否存在key对应的节点booleancontainsValue(Object value) 当前实例中是否存在对应的TreeEntry实例entrySet()获取key对应的节点booleanisEmpty()当前实例是否为空keySet()返回当前实例中全部的key组成的Set集合void为指定的节点建立父子关系,若parentKey或childKey对应节点不存在,则会创建一个对应的值为null的空节点voidputLinkedNodes(K parentKey, K childKey, V childValue) 添加子节点,并为子节点指定父节点: 若parentKey或childKey对应的节点不存在,则会根据键值创建一个对应的节点; 若parentKey或childKey对应的节点存在,则会更新对应节点的值;voidputLinkedNodes(K parentKey, V parentValue, K childKey, V childValue) 同时添加父子节点: 若parentKey或childKey对应的节点不存在,则会根据键值创建一个对应的节点; 若parentKey或childKey对应的节点存在,则会更新对应节点的值; 该操作等同于:添加一个节点 若key对应节点不存在,则以传入的键值创建一个新的节点; 若key对应节点存在,则将该节点的值替换为node指定的值;将指定节点从当前Map中删除 若存在父节点或子节点,则将其断开其与父节点或子节点的引用关系; 若同时存在父节点或子节点,则会在删除后将让子节点直接成为父节点的子节点,比如: 现有引用关系 a -> b -> c,删除 b 后,将有 a -> cintsize()获取当前实例中的节点个数voidunlinkNode(K parentKey, K childKey) 移除指定父节点与其直接关联的子节点间的引用关系,但是不会将该节点从集合中删除values()返回当前实例中全部TreeEntry组成的Collection集合Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.miaixz.bus.core.center.map.ForestMap
containsChildNode, containsParentNode, getChildNodes, getDeclaredChildNodes, getDeclaredParentNode, getNodeValue, getParentNode, getRootNode, getTreeNodes, linkNodes, put, putAll, putAllNodeMethods inherited from interface java.util.Map
compute, computeIfAbsent, computeIfPresent, equals, forEach, getOrDefault, hashCode, merge, putIfAbsent, remove, replace, replace, replaceAll
-
Constructor Details
-
LinkedForestMap
public LinkedForestMap(boolean allowOverrideParent) 构建LinkedForestMap- Parameters:
allowOverrideParent- 当指定节点已经与其他节点构成了父子关系,是否允许将该节点的父节点强制替换为指定节点
-
-
Method Details
-
size
public int size()获取当前实例中的节点个数 -
isEmpty
public boolean isEmpty()当前实例是否为空 -
containsKey
当前实例中是否存在key对应的节点- Specified by:
containsKeyin interfaceMap<K,V> - Parameters:
key- data- Returns:
- 是否
-
containsValue
当前实例中是否存在对应的TreeEntry实例- Specified by:
containsValuein interfaceMap<K,V> - Parameters:
value-TreeEntry实例- Returns:
- 是否
-
get
获取key对应的节点 -
remove
将指定节点从当前Map中删除- 若存在父节点或子节点,则将其断开其与父节点或子节点的引用关系;
- 若同时存在父节点或子节点,则会在删除后将让子节点直接成为父节点的子节点,比如: 现有引用关系 a -> b -> c,删除 b 后,将有 a -> c
-
clear
public void clear()将当前集合清空,并清除全部节点间的引用关系 -
keySet
返回当前实例中全部的key组成的Set集合 -
values
返回当前实例中全部TreeEntry组成的Collection集合 -
entrySet
-
putNode
添加一个节点- 若key对应节点不存在,则以传入的键值创建一个新的节点;
- 若key对应节点存在,则将该节点的值替换为
node指定的值;
-
putLinkedNodes
同时添加父子节点:- 若
parentKey或childKey对应的节点不存在,则会根据键值创建一个对应的节点; - 若
parentKey或childKey对应的节点存在,则会更新对应节点的值;
TreeEntry<K, V> parent = putNode(parentKey, parentValue); TreeEntry<K, V> child = putNode(childKey, childValue); linkNodes(parentKey, childKey);
- Specified by:
putLinkedNodesin interfaceForestMap<K,V> - Parameters:
parentKey- 父节点的keyparentValue- 父节点的valuechildKey- 子节点的keychildValue- 子节点的值
- 若
-
putLinkedNodes
添加子节点,并为子节点指定父节点:- 若
parentKey或childKey对应的节点不存在,则会根据键值创建一个对应的节点; - 若
parentKey或childKey对应的节点存在,则会更新对应节点的值;
- Specified by:
putLinkedNodesin interfaceForestMap<K,V> - Parameters:
parentKey- 父节点的keychildKey- 子节点的keychildValue- 子节点的值
- 若
-
linkNodes
为指定的节点建立父子关系,若parentKey或childKey对应节点不存在,则会创建一个对应的值为null的空节点 -
unlinkNode
移除指定父节点与其直接关联的子节点间的引用关系,但是不会将该节点从集合中删除- Specified by:
unlinkNodein interfaceForestMap<K,V> - Parameters:
parentKey- 父节点的keychildKey- 子节点
-