日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

不用遞歸實(shí)現(xiàn)無(wú)限級(jí)下拉樹(shù)高效算法【原創(chuàng)】

系統(tǒng) 2035 0

在公司項(xiàng)目中用遞歸生成 Tree 時(shí),出現(xiàn)了很?chē)?yán)重的性能問(wèn)題,在google 中 go 很久,也沒(méi)有找到不用遞歸實(shí)現(xiàn)無(wú)限級(jí) Tree 的算法。后來(lái),抱著嘗試的心理。結(jié)果,我用兩個(gè)循環(huán)就搞定了。自認(rèn)為這個(gè)算法應(yīng)該很高效,以后遞歸樹(shù)的地方我就用這個(gè)算法了。不過(guò),需要注意的是,你的數(shù)據(jù)必須是根據(jù)ID從小到大排過(guò)序的。否則,就會(huì)顯示不正確。如果數(shù)據(jù)無(wú)序,建議你先排序然后才調(diào)用此算法。看來(lái),我還是相當(dāng)聰明的嘛,嘿嘿

以下是代碼:

public static void main(String[] args)
?{
??/*------------- 樹(shù)形結(jié)構(gòu)測(cè)試數(shù)據(jù) START CODE --------------*/
??List<Object[]> list = new ArrayList<Object[]>();
??
??list.add(new Object[]{"AA1",999,0});
??list.add(new Object[]{"AA1_AA2",11,999});
??list.add(new Object[]{"AA1_AA1",10,999});
??list.add(new Object[]{"AA1_AA1_AA2",1001,10});
??list.add(new Object[]{"AA1_AA1_AA1",100,10});
??list.add(new Object[]{"AA1_AA1_AA2_AA1",100101,1001});
??list.add(new Object[]{"AA1_AA1_AA2_AA2",100102,1001});
??list.add(new Object[]{"BB1",2,0});
??list.add(new Object[]{"BB1_BB1",20,2});
??list.add(new Object[]{"BB1_BB1_BB1",200,20});
??list.add(new Object[]{"BB1_BB1_BB2",201,20});
??
??/*------------- 樹(shù)形結(jié)構(gòu)測(cè)試數(shù)據(jù) START END --------------*/
??
??StringBuffer sb = new StringBuffer();
??//存放符合條件的所有 節(jié)點(diǎn)ID
??List<Integer> aList = new ArrayList<Integer>();
??aList.add(999);?//測(cè)試查找以 3 作為父節(jié)點(diǎn)的所有 子節(jié)點(diǎn)列表
??//存放在內(nèi)部循環(huán)中所有找到的以指定ID作為父節(jié)點(diǎn)的子ID。
??List<Integer> tempList = new ArrayList<Integer>();
??
??for(int i=0,count=list.size();i<count; i++){
???Object[] arr = list.get(i);
???String name = arr[0].toString();
???int id = Integer.parseInt(arr[1].toString());
???int pid = Integer.parseInt(arr[2].toString());
???for(int j=0,len=aList.size(); j<len; j++){
????int currid = aList.get(j);
????if(id==currid || pid==currid){?//如果數(shù)據(jù)中 ID或 PID與指定 currid 相同
?????sb.append(name+"\n");
?????tempList.add(id);?//保存子節(jié)點(diǎn)ID到 tempList
????}
????//如果找到最后一個(gè),并且 tempList 中有子節(jié)點(diǎn)的話(huà),把 tempList 賦給 aList
????if(j==(len-1) && tempList.size()>0){?
?????aList = tempList;
????}
???}
??}
??//打印所有以 3 作為父節(jié)點(diǎn)的所有 子節(jié)點(diǎn)
??System.out.println(sb.toString());
?}

?

執(zhí)行結(jié)果如下:

AA1
AA1_AA2
AA1_AA1
AA1_AA1_AA2
AA1_AA1_AA1
AA1_AA1_AA2_AA1

不用遞歸實(shí)現(xiàn)無(wú)限級(jí)下拉樹(shù)高效算法【原創(chuàng)】


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 常熟市| 盖州市| 集贤县| 泗阳县| 临朐县| 盐源县| 衡阳县| 寿宁县| 安宁市| 滦平县| 东海县| 云和县| 叶城县| 广东省| 淄博市| 保定市| 麻江县| 巴里| 清徐县| 城市| 白玉县| 兴城市| 惠东县| 海安县| 北安市| 大方县| 淮南市| 盐津县| 三台县| 阿拉尔市| 临夏县| 化德县| 建阳市| 资中县| 武陟县| 石家庄市| 根河市| 五常市| 凉城县| 子洲县| 麻江县|