欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java ArrayList中的remove方法介紹

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

先看一段代碼,看看自定義的ArrayList中的remove設(shè)計(jì)是否有問(wèn)題。

public class MyArrayList {
    private Object[] mData = new Object[0];
    private int mSize = 0;
    // 刪除第i個(gè)元素
    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;
    }
    // ... 其他方法略
}

走進(jìn)源碼:

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

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

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

實(shí)現(xiàn)步驟:

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

修改次數(shù)+1把需要?jiǎng)h除的元素賦給oldValue,一遍方法返回舊元素numMoved計(jì)算出的是刪除元素后需要移動(dòng)的元素?cái)?shù)。

當(dāng)numMoved>0 說(shuō)明刪除元素后需要把后面的元素往前移動(dòng)。

當(dāng)numMoved<0 時(shí),說(shuō)明刪除的元素為最后一個(gè)元素。

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

(2)根據(jù)內(nèi)容刪

參考資料:

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
}

實(shí)現(xiàn)步驟:

因?yàn)閷?duì)象是否相等需要使用equals方法,但是空對(duì)象不能使用equals方法比較。

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

為空時(shí) 使用==來(lái)尋找數(shù)組中空對(duì)象并刪除。不為空時(shí),便使用equals遍歷尋找來(lái)刪除相應(yīng)對(duì)象。

OK,ArrayList的第一階段的研究到此結(jié)束,針對(duì)開(kāi)頭的問(wèn)題,已經(jīng)找到了答案。

remove的設(shè)計(jì)有問(wèn)題,–mSize;之后需要把mData[–mSize]=null;讓垃圾回收器回收 ,防止對(duì)象游離。

未來(lái)有時(shí)間的研究方向大概如下,

?ArrayList?? VS ??LinkedList??

如何自定義一個(gè)??ArrayList??

ArrayList的研究有時(shí)間可以再深入了解一下。網(wǎng)上的文章已經(jīng)很多,在此不在贅述。旨在加深自我認(rèn)知,上述大家如有疑問(wèn),歡迎PK。

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

相關(guān)文章

  • Spring注解和同步鎖不能同步問(wèn)題解決

    Spring注解和同步鎖不能同步問(wèn)題解決

    這篇文章主要介紹了Spring注解和同步鎖不能同步問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Java設(shè)計(jì)模式之java觀(guān)察者模式詳解

    Java設(shè)計(jì)模式之java觀(guān)察者模式詳解

    這篇文章主要介紹了Java經(jīng)典設(shè)計(jì)模式之觀(guān)察者模式,簡(jiǎn)單分析了觀(guān)察者模式的概念、原理并結(jié)合實(shí)例形式給出了java觀(guān)察者模式的具體用法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2021-09-09
  • Intellj Idea中的maven工程Java文件顏色不對(duì),未被識(shí)別的解決

    Intellj Idea中的maven工程Java文件顏色不對(duì),未被識(shí)別的解決

    這篇文章主要介紹了Intellj Idea中的maven工程Java文件顏色不對(duì),未被識(shí)別的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • java實(shí)現(xiàn)隨機(jī)森林RandomForest的示例代碼

    java實(shí)現(xiàn)隨機(jī)森林RandomForest的示例代碼

    本篇文章主要介紹了java實(shí)現(xiàn)隨機(jī)森林RandomForest的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • SpringMVC對(duì)日期類(lèi)型的轉(zhuǎn)換示例

    SpringMVC對(duì)日期類(lèi)型的轉(zhuǎn)換示例

    本篇文章主要介紹了SpringMVC對(duì)日期類(lèi)型的轉(zhuǎn)換示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • Springboot使用Redis中ZSetOperations實(shí)現(xiàn)博客訪(fǎng)問(wèn)量

    Springboot使用Redis中ZSetOperations實(shí)現(xiàn)博客訪(fǎng)問(wèn)量

    在日常的網(wǎng)站使用中,經(jīng)常會(huì)碰到頁(yè)面的訪(fǎng)問(wèn)量,本文主要介紹了Springboot使用Redis中ZSetOperations實(shí)現(xiàn)博客訪(fǎng)問(wèn)量,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • java.io.IOException:?UT010029:?Stream?is?closed異常分析及解決

    java.io.IOException:?UT010029:?Stream?is?closed異常分析及解決

    這篇文章主要給大家介紹了關(guān)于java.io.IOException:?UT010029:?Stream?is?closed異常分析及解決辦法,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-02-02
  • mybatis時(shí)間范圍查詢(xún)代碼示例

    mybatis時(shí)間范圍查詢(xún)代碼示例

    這篇文章主要給大家介紹了關(guān)于mybatis時(shí)間范圍查詢(xún)的相關(guān)資料,在項(xiàng)?中避免不了要?到時(shí)間范圍查詢(xún),文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • mybatis?plus新增(insert)數(shù)據(jù)獲取主鍵id的問(wèn)題

    mybatis?plus新增(insert)數(shù)據(jù)獲取主鍵id的問(wèn)題

    這篇文章主要介紹了mybatis?plus新增(insert)數(shù)據(jù)獲取主鍵id的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • java開(kāi)發(fā)微信分享接口的步驟

    java開(kāi)發(fā)微信分享接口的步驟

    這篇文章主要為大家詳細(xì)介紹了java開(kāi)發(fā)微信分享接口的步驟,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11

最新評(píng)論