1. 程式人生 > 其它 >for迴圈偶遇的一個小問題。

for迴圈偶遇的一個小問題。

下面是一個二級分類目錄的程式碼示例。
其中OneCategory是一級分類的集合,TwoCategory是二級分類的集合。categoryEntity是分類的實體類,添加了屬性名為children的一個categoryEntity的List集合。
思路:
for迴圈遍歷一級分類,然後巢狀for迴圈二級分類。
二級分類的for迴圈裡面:用if判斷二級分類的父id是否等於當前迴圈的一級分類的id。
如果等於,則將當前的二級分類新增到一個新的集合中。

二級分類迴圈外面,一級分類迴圈裡面:
將這個陣列放入一級分類集合的children屬性中

我發現的問題是:
for迴圈,只有執行完畢才可以更新其中的集合資料。
比如將新集合放在一級分類迴圈外面,
在一級分類迴圈中,如果將集合的值(此時是有值的)賦值給當前一級分類的children屬性。
然後清空該集合。原因是:如果不清空,i=1的二級分類迴圈後的值也會在被新增在此集合中,此時就會導致i=1的一級分類的children值是包含i=0的children值
執行清空語句後,會發現此時所有的一級分類的children值是空的。

由上面可以推匯出:for迴圈中,資料是一體的無法在其中做資料的多次修改。只會保留最後的修改資料
下面例項的程式碼時,將每一次一級分類迴圈時,都建立一個數組,這樣每次只會使用自己的陣列,但是消耗的記憶體可能會比較大。
暫時沒有好的想法

如下程式碼

for (int i = 0; i <OneCategory.size() ; i++) {

            CategoryEntity categoryEntity = OneCategory.get(i);    //獲取當前集合的i號元素的物件

            ArrayList<CategoryEntity> OneChildrenList = new ArrayList<>();    //新建一個集合用於存放二級目錄

            for (int j = 0; j <TwoCategory.size() ; j++) {

                if (TwoCategory.get(j).getParentCid().equals(categoryEntity.getCatId())){  //  一級分類的id是否等於二級分類的父id
                    OneChildrenList.add(TwoCategory.get(j));  // 等於,就新增該二級分類元素到集合中
                }
            }

            categoryEntity.setChildren(OneChildrenList);  // 最後將這個陣列放入一級分類集合的children屬性中

        }
(```