list筆記

概述        

      list在工作中很常見,但是作爲一個如此底層的集合,經常還用錯,可見我的java功底其實是很薄弱的,特做一下筆記:

       list是一個集合容器,放置同一類對象,其通用的功能對這個對象容器增,減,改,查.

筆記

       以下列舉一下容易出錯的地方:

  • list中是可以存放同一個對象,list中一些方法涉及到對象之間比較,比如contains,remove,retainAll等,對象之間的比較其實本質上是依賴equals方法的,當list中存放是一個pojo對象時,使用上述方法,是必須要重寫equals方法的
  • sublist(int fromIndex, int toIndex)方法,常用這個方法獲取list的其中某連續的一段,首先這個方法就有一些前提 fromIndex > =0,toIndex >= fromIndex,toIndex<=size

                a.容易出現的是toIndex>size,要使用這個方法,必須要知道list原有的size,通常在進行數據分批處理或者分頁的時候,忽略了這個判斷(一定要有空指針,數組越界的意識),

                b.這個方法返回的其實是一個私有內部類sublist,這個sublist裏面的對象還是指向原有對象(java中除了一些基本類型,代碼中對對象的引用基本都是各種指針,比如new Arraylist(Collection) 集合是新集合,但是集合裏面的對象還是原對象),這個返回值只能用lis接收,不能像arraylist等強轉

                c.對sublist結果集進行增減(size的變化)都會影響原有list,sublist裏面的每一個值,其實都指向原有list,包括其在原有list的位置,操作sublist相當於就是在操作原有list

  • list的遍歷有for,超級for,iterator, 遍歷中一般是不推薦對list進行size變動的,(除了iterator可以進行刪除)

                 a.for:for循環對list的操作list的index,list進行size變動,原有的index對應的值會改變,新增有可能造成死循環,刪除可能造成查詢越界

                 b.超級for:不允許list size有變動

                 c.iterator:遊標式遍歷,只能遍歷一個刪除一個

  • list作爲參數,list最爲參數時,不要爲null,list的方法中,參數爲list,基本沒有進行非空判斷(java jdk中的方法基本沒有非空判斷,太冗餘,非空判斷基本都要在業務邏輯中判斷),爲null會報錯

          項目中用list查詢偏多,故而常用arraylist,arraylist底層是數組,其擴容就是new 一個更大的數組,將原來的數據複製,因此能指定size的就儘量指定size,對size大的養成用完clear的習慣.arraylist不是線程安全的,要使用線程安全,Collections.synchronizedList(list)即可

         linkedlist用的少,略

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章