亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

區(qū)別:

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

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

就算是,你知道了上面的內容,也不能保證,你能安全的回答下面的代碼運行結果。

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,"放在下標為1的位置");
    list.add("22");
    System.out.println("list大小為:" + list.size());
    System.out.println(list.toString());
    list.add(1,"放在下標為1的位置");
    System.out.println("list大小為:" + list.size());
    System.out.println(list.toString());
  }
}

運行結果:

估計,很多人都大出所料吧。結果怎么是這樣呢!下面有這么幾個坑。

解釋:

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

這個乍一看,還以為像數組一樣,你初始化了個長度為2的數組,然后你就可以隨意修改下標為0,1的內容。當然0,1是肯定不會下標越界的。

我當時也是這么想的。然而不是的。

源碼里面的構造函數的注釋說明:這個真的是在底層新建了個長度為2的數組Object[],但是他又不是我們經??吹降囊话銛到M。這個是空的。

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

2,list.size()

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

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

這個size是表示這個集合包含的元素的個數,而不是底層數組的大小。

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

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

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

這個時候,index是1,但是size是1。

so,就異常啦。

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

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

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

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

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

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

這個不僅僅是把index位置的數據給替換啦,而且把之前這個位置的數據給依次向后移動啦,這個跟map的結構不一樣,map是更新指定位置的數據,其他的數據不動,這個list竟然是把把數據平移啦。

總結

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

相關文章

  • Java與WebUploader相結合實現文件上傳功能(實例代碼)

    Java與WebUploader相結合實現文件上傳功能(實例代碼)

    這篇文章主要介紹了Java結合WebUploader實現文件上傳功能,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-03-03
  • java郵件通知工具類

    java郵件通知工具類

    這篇文章主要為大家詳細介紹了java郵件通知工具類,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Spring Boot中使用Spring-data-jpa的配置方法詳解

    Spring Boot中使用Spring-data-jpa的配置方法詳解

    今天小編就為大家分享一篇關于Spring Boot中使用Spring-data-jpa的配置方法詳解,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 使用Spring的攔截器監(jiān)測每個Controller或方法的執(zhí)行時長

    使用Spring的攔截器監(jiān)測每個Controller或方法的執(zhí)行時長

    這篇文章主要介紹了使用Spring的攔截器監(jiān)測每個Controller或方法的執(zhí)行時長,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 使用Jenkins Pipeline自動化構建發(fā)布Java項目的方法

    使用Jenkins Pipeline自動化構建發(fā)布Java項目的方法

    這篇文章主要介紹了使用Jenkins Pipeline自動化構建發(fā)布Java項目的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • Mybatis-Plus select不列出全部字段的方法

    Mybatis-Plus select不列出全部字段的方法

    這篇文章主要介紹了Mybatis-Plus select不列出全部字段的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • 消息隊列 RabbitMQ 與 Spring 整合使用的實例代碼

    消息隊列 RabbitMQ 與 Spring 整合使用的實例代碼

    本篇文章主要介紹了消息隊列 RabbitMQ 與 Spring 整合使用的實例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • java對象初始化順序驗證示例

    java對象初始化順序驗證示例

    以下這段小程序對調用對象構造函數時,父類構造函數、成員變量初始化函數,以及非靜態(tài)初始化塊調用順序進行驗證,不考慮靜態(tài)成員及靜態(tài)初始化塊
    2014-02-02
  • Spring 開發(fā)之組件賦值的實現方法

    Spring 開發(fā)之組件賦值的實現方法

    這篇文章主要介紹了Spring 開發(fā)之組件賦值的實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • java 判斷l(xiāng)ist是否為空過程解析

    java 判斷l(xiāng)ist是否為空過程解析

    這篇文章主要介紹了java 判斷l(xiāng)ist是否為空過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09

最新評論