HashTree作为jmeter的核心数据结构,对于理解jmeter的工作原理非常有作用。
jmeter HashTree从源码中可以知道,它实现了Map<Object,HashTree>,所以他就是一个Map的实现,其中Key存放的是jmeter中TestElement,而value就是存放的另外一个HashTree。
HashTree中比较重要的方法就是add(Object o, HashTree hashTree),getTree(Object o)。
从源码中可以看到,add(Object o, HashTree hashTree)其中调用了add(Object o).add(HashTree hashTree)方法,add(Object o)是添加key,如果不存在就添加一个key和new HashTree(),其中key 为TestElement, value 为一个空的HashTree;而如果o存在,则通过getTree(Object o)取出这个节点的HashTree,然后add(HashTree hashTree)方法,内部实现就是遍历下list(),list()就是Map的key.set(),然后将testElement依次添加到hashTree的key中,直到最后取出的hashTree不存在。
HashTree中另外一个比较重要的就是HashTreeTraverser接口,其中SearchByClass是其中一个重要的实现类,它当中有三个比较重要的属性:
1.objectOfClass
2.subTrees
3.class
objectOfClass存放搜索结果
subTrees 获取指定节点的子树
class 要搜索的节点类型
跟HashTree.traverse(HashTreeTraverser traverser)一起使用可以将HashTree中指定类型的TestElement放入到objectOfClass属性当中。
ListedHashTree SortedHashTree都是从HashTree继承而来,其中ListedHashTree 用LinkedList 一个链表用来有序存放key(也就是TestElement),而SortedHashTree 则是用SortedHashMap来存放相应的TestElement,从而将按照TestElement 的compare方法进行存放
本文深入探讨了JMeter中核心数据结构HashTree的工作原理及其实现细节,包括其作为Map的实现方式、关键方法add与getTree的作用,以及HashTreeTraverser接口的使用方法。
969

被折叠的 条评论
为什么被折叠?



