国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

初探ArrayList之刪除

wayneli / 1791人閱讀

摘要:返回刪除元素的刪除方法記錄修改次數(shù)的變量根據(jù)數(shù)組下標(biāo)拿到指定元素計算移動位數(shù)把中復(fù)制到,最后一個元素置為下標(biāo)檢查,如果大于數(shù)組的,拋出異常返回一個值的刪除方法傳進(jìn)來,刪除第一個值為的值注意此時加入了兩個值此時執(zhí)行了一句只刪除了

1.返回刪除元素的刪除方法
public E remove(int index) {
    rangeCheck(index);
    
    modCount++;//記錄修改次數(shù)的變量
    E oldValue = elementData(index);//根據(jù)數(shù)組下標(biāo)拿到指定元素
    
    int numMoved = size - index - 1;//計算移動位數(shù)
    if (numMoved > 0)
    System.arraycopy(elementData, index+1, elementData, index,
                     numMoved);//把elementData中(index+1,size-1)復(fù)制到(index,size-1)
    elementData[--size] = null; // size-1,最后一個元素置為null
    
    return oldValue;
}

下標(biāo)檢查,如果大于數(shù)組的size,拋出異常

private void rangeCheck(int index) {
    if (index >= size)
        throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
2.返回一個boolean值的刪除方法

2.1傳進(jìn)來null,刪除第一個值為null的值(注意此時加入了兩個null值)

此時執(zhí)行了一句list.remove(null);只刪除了在物理位置上比較靠前的null,第二次刪除才會刪除第二個null

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

此方法執(zhí)行的就是上面"返回刪除元素"方法中的內(nèi)容

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;
}
3.從這個列表中刪除所有未包含在指定集合中的元素
public boolean retainAll(Collection c) {
    Objects.requireNonNull(c); // 檢查,如果此對象為空,拋出空指針異常
    return batchRemove(c, true);
}
private boolean batchRemove(Collection c, boolean complement) {
    final Object[] elementData = this.elementData;
    int r = 0, w = 0;
    boolean modified = false;
    try {
        for (; r < size; r++)
            //如果傳入的集合c,包含當(dāng)前所遍歷的數(shù)組的元素,重新整理一下list中的元素
            if (c.contains(elementData[r]) == complement)
                elementData[w++] = elementData[r];
    } finally {
        // 拋出異常后的處理(下面為JDK中的描述)
        // Preserve behavioral compatibility with AbstractCollection,
        // even if c.contains() throws.
        if (r != size) {
            System.arraycopy(elementData, r,
                             elementData, w,
                             size - r);
            w += size - r;
        }
        if (w != size) {
            // clear to let GC do its work
            for (int i = w; i < size; i++)
                elementData[i] = null;
            modCount += size - w;
            size = w;
            modified = true;
        }
    }
    return modified;
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/67672.html

相關(guān)文章

  • 初探ArrayList添加

    摘要:如果這個是剛剛初始化好的容量為,則為默認(rèn)值若容量不固定,則比較與的大小,返回最大值?,F(xiàn)在最小容量大小超過現(xiàn)在數(shù)組的長度,增長自增倍大于溢出三元表達(dá)式,大于取整形最大值用新的長度創(chuàng)建一個新數(shù)組把原數(shù)組的內(nèi)容拷貝到新數(shù)組中,并返回新數(shù)組 一、構(gòu)造方法 1.創(chuàng)建一個空ArrayList public ArrayList() { this.elementData = DEFAULTCA...

    XiNGRZ 評論0 收藏0
  • JAVA 持有對象——容器初探(持續(xù)補(bǔ)充)

    摘要:類庫中提供了一套相當(dāng)完整的容器類來解決這個問題,其中基本類型有,,,,這些對象類型被稱為集合類。但是,類庫中使用了來指代集合類中的子集,,,所以集合類也被稱為容器。五類型是能夠?qū)ο笥成涞狡渌麑ο蟮囊环N容器,有區(qū)別于的方法。 引言 如果一個程序只包含固定數(shù)量的且其生命周期都是已知對象,那么這是一個非常簡單的程序——《think in java》 了解容器前,先提出一個問題,ArrayL...

    aikin 評論0 收藏0
  • 初探STL關(guān)聯(lián)容器

    摘要:更加實際的定義應(yīng)該是一個集合是一個容器,它其中所包含的元素的值是唯一的。對而言,鍵只是指存儲在容器中的某一成員。成員函數(shù)構(gòu)造函數(shù)中的元素都是模板類對象。元素按照成員變量從小到大排列,缺省情況下用定義關(guān)鍵字的小于關(guān)系。 分類:set, multiset, map, multimap 特點(diǎn):內(nèi)部元素有序排列,新元素插入的位置取決于它的值,查找速度快。 常用函數(shù): find: 查找等于...

    objc94 評論0 收藏0
  • 初探Java類型擦除

    摘要:可以看到,如果我們給泛型類制定了上限,泛型擦除之后就會被替換成類型的上限。相應(yīng)的,泛型類中定義的方法的類型也是如此。參考語言類型擦除下界通配符和的區(qū)別 本篇博客主要介紹了Java類型擦除的定義,詳細(xì)的介紹了類型擦除在Java中所出現(xiàn)的場景。 1. 什么是類型擦除 為了讓你們快速的對類型擦除有一個印象,首先舉一個很簡單也很經(jīng)典的例子。 // 指定泛型為String List list1 ...

    DevTalking 評論0 收藏0
  • 初探STL算法

    摘要:算法部分主要由頭文件組成。數(shù)值算法對容器內(nèi)容進(jìn)行數(shù)值計算。在指定范圍內(nèi)查找由輸入的另外一對標(biāo)志的第二個序列的最后一次出現(xiàn)。重載函數(shù)使用自定義比較操作。刪除指定范圍內(nèi)所有等于指定元素的元素。返回,指出序列中最小的元素。 STL算法部分主要由頭文件,,組成。要使用 STL中的算法函數(shù)必須包含頭文件,對于數(shù)值算法須包含,中則定義了一些模板類,用來聲明函數(shù)對象。 分類 STL中算法大致分為...

    nanfeiyan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<