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

Java ArrayList add(int index, E element)和set(int index, E element)兩個(gè)方法的說明

 更新時(shí)間:2018年10月22日 12:00:24   作者:李學(xué)凱  
今天小編就為大家分享一篇關(guān)于Java ArrayList add(int index, E element)和set(int index, E element)兩個(gè)方法的說明,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧

一般使用List集合,估計(jì)都是使用這個(gè)ArrayList,一般呢也就是簡單遍歷數(shù)據(jù)和存儲(chǔ)數(shù)據(jù)。
很少使用到add(int index, E element)和set(int index, E element)兩個(gè)方法。
這兩個(gè)方法,乍一看,就是在指定的位置插入一條數(shù)據(jù)。

區(qū)別:

  • set()是更新,更新指定下標(biāo)位置的值。
  • add()是添加,區(qū)別于一般的add(E e),這個(gè)就是有個(gè)位置的概念,特殊位置之后的數(shù)據(jù),依次往后移動(dòng)就是了。

然后,看下面代碼。來看看陷阱。

就算是,你知道了上面的內(nèi)容,也不能保證,你能安全的回答下面的代碼運(yùn)行結(jié)果。

public class ArrayListTest {
  public static void main(String[] args) {
    List<String> list = new ArrayList<>(2);
    System.out.println("list大小為:" + list.size());
    list.add("12");
    System.out.println("list大小為:" + list.size());
    list.set(1,"sss");
    list.add(1,"放在下標(biāo)為1的位置");
    list.add("22");
    System.out.println("list大小為:" + list.size());
    System.out.println(list.toString());
    list.add(1,"放在下標(biāo)為1的位置");
    System.out.println("list大小為:" + list.size());
    System.out.println(list.toString());
  }
}

運(yùn)行結(jié)果:

估計(jì),很多人都大出所料吧。結(jié)果怎么是這樣呢!下面有這么幾個(gè)坑。

解釋:

1,List<String> list = new ArrayList<>(2)

這個(gè)乍一看,還以為像數(shù)組一樣,你初始化了個(gè)長度為2的數(shù)組,然后你就可以隨意修改下標(biāo)為0,1的內(nèi)容。當(dāng)然0,1是肯定不會(huì)下標(biāo)越界的。

我當(dāng)時(shí)也是這么想的。然而不是的。

源碼里面的構(gòu)造函數(shù)的注釋說明:這個(gè)真的是在底層新建了個(gè)長度為2的數(shù)組Object[],但是他又不是我們經(jīng)??吹降囊话銛?shù)組。這個(gè)是空的。

當(dāng)前l(fā)ist集合仍然是一個(gè)帶有初始容量的empty list。

2,list.size()

我上來也是想當(dāng)然的以為,這個(gè)size()不就是上面的那個(gè)2嗎!但是我錯(cuò)了。

源碼中ArrayList的size屬性對應(yīng)的注釋是:The size of the ArrayList (the number of elements it contains).

這個(gè)size是表示這個(gè)集合包含的元素的個(gè)數(shù),而不是底層數(shù)組的大小。

3,list.set(1,"sss")

在知道了上面的2個(gè)坑之后,這個(gè)就好解釋了。代碼是要設(shè)置下標(biāo)為1的值,但是。在源碼中有 rangeCheck(index); 

private void rangeCheck(int index) {
  if (index >= size)
    throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}

這個(gè)時(shí)候,index是1,但是size是1。

so,就異常啦。

4,list.add(1,"放在下標(biāo)為1的位置")

這個(gè)和上面相似,但還是有點(diǎn)不一樣,上面判斷是大于等于size,但是在這個(gè)add方法,卻是要大于才可以。
而且還有個(gè)專門的check方法for add,如下:rangeCheckForAdd(index);

private void rangeCheckForAdd(int index) {
  if (index > size || index < 0)
    throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}

那,這個(gè)在下標(biāo)為1的位置,添加元素,判斷 1 > 1 不成立,那么就可以順利添加了。這個(gè)就不異常啦。

但是,你要是在數(shù)組聲明完,直接在下標(biāo)為1的位置,這么干,就異常了。就不在繼續(xù)分析了。

5,還有個(gè)問題,就是你在一個(gè)位置一直add(index , element)

這個(gè)不僅僅是把index位置的數(shù)據(jù)給替換啦,而且把之前這個(gè)位置的數(shù)據(jù)給依次向后移動(dòng)啦,這個(gè)跟map的結(jié)構(gòu)不一樣,map是更新指定位置的數(shù)據(jù),其他的數(shù)據(jù)不動(dòng),這個(gè)list竟然是把把數(shù)據(jù)平移啦。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • java compiler沒有1.8怎么解決

    java compiler沒有1.8怎么解決

    這篇文章主要介紹了java compiler沒有1.8的解決方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-08-08
  • 詳解Java中ThreadLocal類型及簡單用法

    詳解Java中ThreadLocal類型及簡單用法

    ThreadLocal實(shí)例通常是希望將狀態(tài)與線程關(guān)聯(lián)起來的類中的私有靜態(tài)字段,下面通過例子給大家詳細(xì)介紹Java中ThreadLocal類型及簡單用法,感興趣的朋友跟隨小編一起看看吧
    2021-10-10
  • Java基于ServletContextListener實(shí)現(xiàn)UDP監(jiān)聽

    Java基于ServletContextListener實(shí)現(xiàn)UDP監(jiān)聽

    這篇文章主要介紹了Java基于ServletContextListener實(shí)現(xiàn)UDP監(jiān)聽,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Netty分布式Future與Promise執(zhí)行回調(diào)相關(guān)邏輯剖析

    Netty分布式Future與Promise執(zhí)行回調(diào)相關(guān)邏輯剖析

    這篇文章主要為大家介紹了Netty分布式Future與Promise執(zhí)行回調(diào)相關(guān)邏輯剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • java.mail實(shí)現(xiàn)發(fā)送郵件

    java.mail實(shí)現(xiàn)發(fā)送郵件

    這篇文章主要為大家詳細(xì)介紹了java.mail實(shí)現(xiàn)發(fā)送郵件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(26)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(26)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • Java解析word,獲取文檔中圖片位置的方法

    Java解析word,獲取文檔中圖片位置的方法

    下面小編就為大家分享一篇Java解析word,獲取文檔中圖片位置的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • 全面了解java異常

    全面了解java異常

    本文非常詳細(xì)的介紹了java異常,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們可以學(xué)習(xí)一下這篇文章
    2021-08-08
  • IDEA搭建SpringBoot多模塊聚合工程過程詳解(多模塊聚合工程)

    IDEA搭建SpringBoot多模塊聚合工程過程詳解(多模塊聚合工程)

    這篇文章主要是介紹一下,如何在IDEA開發(fā)工具下,搭建一個(gè)基于SpringBoot的多模塊聚合工程項(xiàng)目,本篇文章,將項(xiàng)目模塊細(xì)分為幾個(gè)子工程模塊,在文中給大家詳細(xì)介紹過,對IDEA搭建SpringBoot多模塊聚合工程感興趣的朋友一起看看吧
    2022-04-04
  • java報(bào)錯(cuò):“錯(cuò)誤:編碼GBK?的不可映射字符”解決辦法

    java報(bào)錯(cuò):“錯(cuò)誤:編碼GBK?的不可映射字符”解決辦法

    當(dāng)Java源代碼中包含中文字符時(shí),我們在用javac編譯時(shí)會(huì)出現(xiàn)“錯(cuò)誤:編碼GBK的不可映射字符”,這篇文章主要給大家介紹了關(guān)于java報(bào)錯(cuò):“錯(cuò)誤:編碼GBK?的不可映射字符”的解決辦法,需要的朋友可以參考下
    2024-08-08

最新評論

郧西县| 巴青县| 馆陶县| 冀州市| 耒阳市| 张掖市| 新源县| 富民县| 岢岚县| 永和县| 和静县| 望城县| 潮州市| 丽江市| 大埔县| 乐山市| 阳信县| 井冈山市| 邹平县| 邢台市| 石渠县| 正阳县| 龙胜| 永德县| 太仓市| 崇州市| 突泉县| 苍梧县| 介休市| 汝阳县| 佛冈县| 千阳县| 松阳县| 绥江县| 辉南县| 岑溪市| 雅安市| 皮山县| 长宁区| 中阳县| 墨竹工卡县|