關於List的remove()方法


最近遇到一個小問題,我將其簡化為下列代碼,List的remove()方法在下列顏色注重的代碼執行的源碼也是不同的~

        List<Integer> list=new ArrayList<>();
        list.add(11);
        list.add(12);
        list.add(13);
        list.add(14);
        list.add(15);
        list.add(16);
        
        /*for (Integer i=0; i<list.size(); i++) {
            if (list.get(i) % 2 == 0) {         list.remove(i); //執行刪除指定位置的元素的功能     執行結果 [11,12,13,14,15,16] } }*/
        for (int i=0; i<list.size(); i++) {
            if (list.get(i) % 2 == 0) { list.remove(i);  //執行刪除指定元素的功能 執行結果 [11,13,15] } }
        for(Integer i : list){ System.out.println(i); }
    }   

上述執行的代碼中remove調用的不是同一個方法分別是list重寫的兩個remove方法,分別為

    public E remove(int index); //執行刪除指定位置的元素的功能
    public boolean remove(Object o)  //執行刪除指定元素的功能
 // 刪除ArrayList指定位置的元素
    public E remove(int index) {
        RangeCheck(index);//檢查index是否超出list大小范圍,否則拋出異常
        modCount++;
        E oldValue = (E) elementData[index];//elementData是實現list的數組 int numMoved = size - index - 1;//當執行刪除操作是后面的元素全部向前面移動一位 if (numMoved > 0)
            System.arraycopy(elementData, index+1, elementData, index,
                 numMoved);
        elementData[--size] = null;
        return oldValue;
    }
    // 刪除ArrayList的指定元素
    public boolean remove(Object o) {
        if (o == null) {
          for (int index = 0; index < size; index++)
             if (elementData[index] == null) {
                 fastRemove(index);
                return true;
            }
        } else {
            for (int index = 0; index < size; index++)
              if (o.equals(elementData[index])) {
                  fastRemove(index);
                  return true;
              }
        }
        return false;
   }
  //快速刪除第index個元素
  private void fastRemove(int index) { modCount++; int numMoved = size - index - 1; if (numMoved > 0) System.arraycopy(elementData, index+1, elementData, index, numMoved); elementData[--size] = null; }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM