今天無意之中在程式中需求遍歷乙個arraylist集合,結果一直都發現好像有問題,除錯了一下,發現程式並沒有按照條件來進行移除操作,到網上搜了下,才發現遍歷arraylist是要注意乙個小問題的,問題大概如下:
問題發生的原因分析:
被遺漏的並不是原list的0號item,而是1號item
為什麼呢?因為當你remove第i個item時,第 [i + 1, count)域中所有items的索引值皆減一(array是連續的,要滿足只要有k ∈ [0, count)則array[k]必存在),那麼當你在迴圈下一輪用i + 1為索引訪問的即是原先list中索引為i + 2的那個item,由此可知,上例中0號被刪除時,原1號變為新0 號,原2號變為新1號。。。下一輪訪問的1號就是先前的2號,而原始的1號則永遠沒有被訪問到
明白了這個自然可以得出正確的迭代方法,正序時需注意索引和可能變化的終止條件,倒序時則簡單些。
說白了就是因為removeat方法會改變count方法的返回值,就造成了不是每個元素都被遍歷到。
ArrayList遍歷刪除方式除錯
錯誤的遍歷方式 fori 正向遍歷方式是通過獲取arraylist的底層陣列通過下標進行遍歷。這種方法進行遍歷刪除指定元素,雖然不會報錯,但是元素資料有誤。list list collutil.newarraylist 1 2,3 4,5 test public void testlist syst...
ArrayList 貨物庫存管理(遍歷)
package com.oracle.demo01 import j a.util.arraylist import j a.util.scanner public class demo03 商品展示頁面 public static void show 查詢所有商品 public static vo...
使用 ArrayList 動態陣列遍歷目錄
sub a byval aa as string aa為欲遍歷的目錄 dim d 1,d 2,d 3,d 4 as new arraylist 定義4個陣列,其中d 3為資料夾陣列,d 4為所有檔案陣列 d 1.addrange system.io.directory.getdirectories ...