`
can_do
  • 浏览: 251404 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

以递归方式从指定根节点,获取一个树型结构的数据

阅读更多
1、以递归方式从指定根节点,获取一个树型结构的数据!

/**
  * 根据指定的根节点从List中遍历一个子树出来;
  *
  * @param paramCollect:提供树节点数据的集合;
  * @param paramDesList:产生的目标子数的集合;
  * @param paramTreeRoot:树根元素;
  * @return void:无返回值;
  */
private static void getSubTree(List<String> paramCollect,
   List<String> paramDesList, final String paramTreeRoot) {
  // try {
  // Thread.sleep(100);// 1秒钟查看一次
  // System.out.println("=1=" + paramCollect.size());
  // } catch (InterruptedException ie) {
  // ie.printStackTrace();
  // }

  if (paramCollect.isEmpty()) {
   return;
  } else {
   int size = (paramCollect == null) ? 0 : paramCollect.size();
   List<String> tempList = new ArrayList<String>();
   for (int i = (size - 1); i >= 0; i--) {
    String key = paramCollect.get(i);
    String[] arrKey = key.split(SYMBOL_FOR_SPLIT_BROKER_INFO);
    // 此处要严格判断相等,不能使用包含关系,比如:des2,des3包含des,但不等于des;
    if (arrKey[0].trim().intern() == paramTreeRoot.trim().intern()
      || arrKey[1].trim().intern() == paramTreeRoot.trim()
        .intern()) {
     paramDesList.add(key);
     tempList.add(key);
     paramCollect.remove(i);
    }
   }

   boolean isRecursiveStopping = false;
   for (int j = 0; j < (tempList == null ? 0 : tempList.size()); j++) {
    String key = (String) tempList.get(j);
    String[] arrKey = key.split(SYMBOL_FOR_SPLIT_BROKER_INFO);
    if (arrKey[0].trim().intern() == paramTreeRoot.trim().intern()) {
     getSubTree(paramCollect, paramDesList, arrKey[1]);
    } else {
     getSubTree(paramCollect, paramDesList, arrKey[0]);
    }
    isRecursiveStopping = true;
   }
   if (isRecursiveStopping) {
    return;
   }

  }

}

public static void main(String[] params) {
  List<String> data = new ArrayList<String>();
  data.add("a<>b");
  data.add("a<>c");
  data.add("a<>e");
  data.add("c<>d");
  data.add("d<>f");
  data.add("m<>l");
  data.add("g<>h");
  data.add("i<>j");
  data.add("j<>k");
  data.add("c<>h");

  List<String> testList = new ArrayList<String>();
  getSubTree(data, testList, "a");

  for (int i = 0; i < (testList == null ? 0 : testList.size()); i++) {
   String key = (String) testList.get(i);
   System.out.println("=No."+(i+1)+" key is:=" + key + "=end=");
  }
}
注意:Map(HashMap和Hashtable)中remove和hasNext不能同时操作,所有用List(ArrayList)数据结构来遍历;

【温馨提示】
如果您觉得满意,可以选择支持下,您的支持是我最大的动力:

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics