最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java ArrayList中的remove方法介紹

 更新時間:2022年01月10日 10:38:49   作者:小羊子說  
大家好,本篇文章主要講的是java ArrayList中的remove方法介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下

先看一段代碼,看看自定義的ArrayList中的remove設計是否有問題。

public class MyArrayList {
    private Object[] mData = new Object[0];
    private int mSize = 0;
    // 刪除第i個元素
    public void remove(int i) {
        if (i < 0 || i >= mSize) return;
        for (int index = i; index < mSize - 1; index++) {
            mData[index] = mData[index + 1];
        }
        --mSize;
    }
    // ... 其他方法略
}

走進源碼:

針對remove,有兩種方式實現(xiàn)

(1)根據位置刪除,代碼如下所示:

public E remove(int index) {
        rangeCheck(index);

        modCount++;
        E oldValue = elementData(index);

        int numMoved = size - index - 1;
        if (numMoved > 0)
            System.arraycopy(elementData, index+1, elementData, index,
                             numMoved);
        elementData[--size] = null; // clear to let GC do its work

        return oldValue;
    }

實現(xiàn)步驟:

檢查所要移除的位置是否落在數(shù)組元素長度之內。

修改次數(shù)+1把需要刪除的元素賦給oldValue,一遍方法返回舊元素numMoved計算出的是刪除元素后需要移動的元素數(shù)。

當numMoved>0 說明刪除元素后需要把后面的元素往前移動。

當numMoved<0 時,說明刪除的元素為最后一個元素。

直接把最后一個位置置空。(分析重點:將最后的位置要設置為空,讓垃圾回收器回收 ,防止對象游離)返回被刪值

(2)根據內容刪

參考資料:

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;
}

其中的fastRemove,代碼如下:

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; // clear to let GC do its work
}

實現(xiàn)步驟:

因為對象是否相等需要使用equals方法,但是空對象不能使用equals方法比較。

因此需要先判斷傳入的對象是否為空。

為空時 使用==來尋找數(shù)組中空對象并刪除。不為空時,便使用equals遍歷尋找來刪除相應對象。

OK,ArrayList的第一階段的研究到此結束,針對開頭的問題,已經找到了答案。

remove的設計有問題,–mSize;之后需要把mData[–mSize]=null;讓垃圾回收器回收 ,防止對象游離。

未來有時間的研究方向大概如下,

?ArrayList?? VS ??LinkedList??

如何自定義一個??ArrayList??

ArrayList的研究有時間可以再深入了解一下。網上的文章已經很多,在此不在贅述。旨在加深自我認知,上述大家如有疑問,歡迎PK。

到此這篇關于java ArrayList中的remove方法介紹的文章就介紹到這了,更多相關java ArrayList中的remove內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • RabbitMQ的安裝和配置可視化界面的詳細步驟

    RabbitMQ的安裝和配置可視化界面的詳細步驟

    這篇文章主要介紹了RabbitMQ的安裝和配置可視化界面的詳細步驟,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Java基礎之線程鎖相關知識總結

    Java基礎之線程鎖相關知識總結

    今天給大家?guī)淼氖顷P于Java線程的相關知識,文章圍繞著Java線程鎖展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 詳解JAVA 字節(jié)流和字符流

    詳解JAVA 字節(jié)流和字符流

    這篇文章主要介紹了JAVA 字節(jié)流和字符流的的相關資料,文中講解非常的細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06
  • Java 和 JavaScript 真正通用的Base64編碼詳解

    Java 和 JavaScript 真正通用的Base64編碼詳解

    這篇文章主要介紹了Java 和 JavaScript 真正通用的Base64編碼詳解的相關資料,附有Java和Javascript 的Base64編碼,需要的朋友可以參考下
    2016-11-11
  • Spring Boot LocalDateTime格式化處理的示例詳解

    Spring Boot LocalDateTime格式化處理的示例詳解

    這篇文章主要介紹了Spring Boot LocalDateTime格式化處理的示例詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • Java比較問題詳細分析

    Java比較問題詳細分析

    本篇文章主要給大家講解了Java中比較問題的相關知識,一起參考學習下吧。
    2017-12-12
  • SpringBoot thymeleaf的使用方法解析

    SpringBoot thymeleaf的使用方法解析

    這篇文章主要介紹了SpringBoot thymeleaf的使用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Java經典排序算法之歸并排序實現(xiàn)代碼

    Java經典排序算法之歸并排序實現(xiàn)代碼

    這篇文章主要介紹了Java經典排序算法之歸并排序實現(xiàn)代碼,歸并排序是建立在歸并操作上的一種有效的排序算法,該算法是采用分治法的一個非常典型的應用,將已有序的子序列合并,得到完全有序的序列,需要的朋友可以參考下
    2023-10-10
  • javaweb實戰(zhàn)之商城項目開發(fā)(二)

    javaweb實戰(zhàn)之商城項目開發(fā)(二)

    這篇文章主要針對javaweb商城項目開發(fā)進行實戰(zhàn)演習,利用mybatis創(chuàng)建DAO層,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Java多線程編程中synchronized線程同步的教程

    Java多線程編程中synchronized線程同步的教程

    Java的synchronized關鍵字可以修飾方法和對象來構建線程間的同步,這里我們就來共同學習Java多線程編程中synchronized線程同步的教程:
    2016-07-07

最新評論

清水河县| 名山县| 崇信县| 县级市| 武宣县| 库车县| 莎车县| 中山市| 铅山县| 灵台县| 连州市| 湖北省| 东台市| 旅游| 三原县| 巴青县| 嘉兴市| 绥滨县| 河东区| 安岳县| 珲春市| 澎湖县| 白玉县| 黑龙江省| 兴隆县| 南充市| 扎鲁特旗| 朝阳区| 蒲江县| 资讯 | 长汀县| 淳安县| 祁连县| 甘洛县| 岢岚县| 资兴市| 府谷县| 公主岭市| 宁津县| 资阳市| 贵南县|