Hashtable就是一个集合,跟同为集合的ArrayList也差不多,跟数组也很像,就是用于存放数据的
集合与数组不同,就是定义的时候不需要指定长度,是可变的,而数组是定长不可变的
如 string[] arrStr = new string[3];数组需要创建时就指定长度,而且不能改变长度
集合如ArrayList list = new ArrayList(); 创建的时候是不用指定长度的,需要放数据的时候用Add方法添加数据,且可以放任何类型的数据
Hashtable身为集合,也同样如此,使用集合的目的就在于不用知道,也不用管有多少数据要放进去
Hashtable是一个以"键值对"为对应关系的集合,需要为每个数据指定一个Key,其实就是ID了,那么通过Key就可以直接取出对应的数据,而不用管这个数据放在集合的哪个位置,不像数组一样需要循环去取出来判断
使用Hashtable的目的就在于不想去循环,我只要通过Key就能直接取出数据,当然集合也是支持循环取数据的
就你的例子, 需要在不同的1级节点下面添加子节点
要添加子节点,就需要取出相应的1级节点,那就需要循环tree,但是每一个子节点都去从tree里面循环找到1级节点就很麻烦,所以我就循环一次1级节点,把他们都取出来放着,下次要有的时候就直接拿出来添加子节点就可以了
但是问题是我要拿哪一个1级节点出来,所以用Hashtable为每个1级节点都指定了一个Key,取1级节点的时候,我只要告诉Hashtable,Key是什么,那Hashtable就会把对应的1级节点取出来给我
那现在就是要找出子节点与Key的关系,方便我拿到一个子节点数据,就能知到Key,然后通过Key,就能直接取出相应的1级节点,把子节点数据添加进去
所以大致看了一下,就用了省份名作为Key,我从子节点数据中取出省份名,然后把省份名告诉Hashtable,Hashtable就通过省份名,把对应的1级节点取出来了
最后我判断一下取出来的节点是不是空,如果传了一个Hashtable中没有的key,那就取不到数据,返回的就是null,所以保险一点,判断一下
确定取到1级节点了,就把子节点Add进去就完了