精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試官讓我聊聊 ArrayList 解決了數組的哪些問題

開發 前端
在面試中經常會問在java中數組長度和ArrayList中的size的區別?通過下面的代碼我們其實已經看出來數組獲取其長度的時候永遠是在聲明的時候定義的長度,即使數組中只有一個元素,通過下面的輸出有人會問arr[1]輸出的是0,這個是因為 int 類型在java中為基本類型所以在初始化數組時會默認用0填充

數組簡介

數組對于我們來說并不陌生,在內存中是一塊連續的內存空間,通過下標可以隨機訪問數組元素 如圖一所示,而在JDK中提供了功能更加強大的ArrayList其底層是基于數據實現的,為什么JDK已經提供了數據還要使用ArrayList呢?我們通過比較兩者之間的差異來聊聊ArrayList的優勢

java數組中如何獲取數組實際元素

在面試中經常會問在java中數組長度和ArrayList中的size的區別?

通過下面的代碼我們其實已經看出來數組獲取其長度的時候永遠是在聲明的時候定義的長度,即使數組中只有一個元素,通過下面的輸出有人會問arr[1]輸出的是0,這個是因為 int 類型在java中為基本類型所以在初始化數組時會默認用0填充

在ArrayList中的長度為list中實際元素的數量,這一點跟數組有著明顯的差別,具體如何實現后面會根據源碼分析

數組刪除元素和添加元素

在數組中刪除一個元素后需要移動元素保證數組的連續性,如果刪除的是數組最后一個元素則不需要移動,如果刪除了下標為3的元素后使數組連續則需要將3號元素后的元素依次向前移動

刪除元素后下標為7的元素不再含有有效元素,如果我們使用的數組刪除數據后這些移動的操作需要我們寫相關的代碼來完成,使用ArrayList刪除與數據移動都將自動完成不需要我們手動處理

在數組中添加元素如果插入元素后元素個數超過了數組的長度則會報數組越界的錯誤,這是因為數組的容量是固定的不能動態的增加

如下圖原數組容量為8如果想要成功添加第9個元素則需要將原來數組容量擴大為9然后移動指定位置的元素并將9插入,正因為這樣數組不具有動態性因此在使用數據時需要額外考慮很多數組本身的問題導致不能專注于核心代碼的編寫

ArrayList的出現正式解決了數組存在以下問題

  • 動態擴容
  • 有效數據長度
  • 增加刪除元素后數據移動
  • 數據遍歷

結合ArrayList一些面試問題來看下具體源代碼

  • ArrayList的默認初始化容量
  • 何時擴容
  • 擴容容量大小
  • 遍歷刪除fast fail原理
  • 迭代器刪除為什么不越界

首先看下ArrayList的兩個重要的屬性

  • elementData 存儲數據的數組
  • size 數組中實際元素個數
  1. transient Object[] elementData; // non-private to simplify nested class access 
  2.  /** 
  3.   * The size of the ArrayList (the number of elements it contains). 
  4.   * 
  5.   * @serial 
  6.   */ 
  7.  private int size

ArrayList 的構造函數分為有參和無參兩種方式

  • 無參構造函數為ArrayList()其初始化后并未分配內存空間而是在第一次add操作時分配
  • 有參構造函數ArrayList(int initialCapacity)初始化即分配制定大小內存
  • 有參構造函數ArrayList(Collection c) 初始化即分配內存

問題一: 無參初始化默認容量是多少,何時擴容,擴容大小為多少都在下面的注釋中可以找到

具體分析請看下面注釋

  1. // 默認初始化elementData為空數組 
  2. private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; 
  3. public ArrayList() { 
  4.     this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; 
  5. //接下來進行add操作 
  6. public boolean add(E e) { 
  7.     // 檢查當前數據容量是否充足 
  8.     ensureCapacityInternal(size + 1);  // Increments modCount!! 
  9.     // size 自增可以保證有效元素的個數 
  10.     elementData[size++] = e; 
  11.     return true
  12.  } 
  13. //計算容量大小主要用于默認初始化第一次add操作 
  14. private static int calculateCapacity(Object[] elementData, int minCapacity) { 
  15.     //默認初始化時elementData=DEFAULTCAPACITY_EMPTY_ELEMENTDATA 
  16.     // 此處返回默認容量DEFAULT_CAPACITY,此值大小為10 
  17.     if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) { 
  18.         return Math.max(DEFAULT_CAPACITY, minCapacity); 
  19.      } 
  20.     return minCapacity; 
  21. private void ensureCapacityInternal(int minCapacity) { 
  22.      ensureExplicitCapacity(calculateCapacity(elementData, minCapacity)); 
  23. private void ensureExplicitCapacity(int minCapacity) { 
  24.      modCount++; 
  25.     //檢查是否擴容,如果當前容量大于數組長度進行擴容 
  26.     // overflow-conscious code 
  27.      if (minCapacity - elementData.length > 0) 
  28.         grow(minCapacity); 
  29. //根據原來數據長度進行擴容 
  30. //oldCapacity >> 1 位運算相當于 oldCapacity=oldCapacity/2 
  31. //新容量為 newCapacity = oldCapacity + (oldCapacity >> 1);即為原來的1.5倍 
  32. //將老數組中的數據移動到新數組中 
  33. //此處解釋下為何為1.5倍,這是一種折中是對擴容次數和空間大小的折中,如果擴容次數太多會降低效率如果空間太大會浪費空間 
  34. private void grow(int minCapacity) { 
  35.    // overflow-conscious code 
  36.    int oldCapacity = elementData.length; 
  37.    int newCapacity = oldCapacity + (oldCapacity >> 1); 
  38.    if (newCapacity - minCapacity < 0) 
  39.       newCapacity = minCapacity; 
  40.    if (newCapacity - MAX_ARRAY_SIZE > 0) 
  41.       newCapacity = hugeCapacity(minCapacity); 
  42.       // minCapacity is usually close to size, so this is a win: 
  43.       elementData = Arrays.copyOf(elementData, newCapacity); 

問題二:數據遍歷,fast-fail,迭代器刪除為什么不越界

在如下代碼注釋中將找到答案

  • ArrayList 遍歷支持for,foreach,迭代器遍歷
  • fail-fast 機制是java集合(Collection)中的一種錯誤機制。當多個線程對同一個集合的內容進行操作時,就可能會產生fail-fast事件。

例如:當某一個線程A通過iterator去遍歷某集合的過程中,若該集合的內容被其他線程所改變了;那么線程A訪問集合時,就會拋出ConcurrentModificationException異常,產生fail-fast事件。

  1. //ArrayList 迭代器是通過兩個游標數組的下標 
  2.  private class Itr implements Iterator<E> {         // 代表下一個元素的游標 
  3.         int cursor;       // index of next element to return 
  4.         int lastRet = -1; // index of last element returned; -1 if no such 
  5.         int expectedModCount = modCount; 
  6.         Itr() {}        // 如果游標不等于size 代表還有下一個元素        public boolean hasNext() {            return cursor != size
  7.         }       //        @SuppressWarnings("unchecked"
  8.         public E next() { 
  9.             checkForComodification();            int i = cursor
  10.             // 在此處判斷當前游標是超過了數組有效元素個數 
  11.             if (i >= size
  12.                 throw new NoSuchElementException();            Object[] elementData = ArrayList.this.elementData;            //檢查是否數組越界 
  13.             if (i >= elementData.length) 
  14.                 throw new ConcurrentModificationException();            cursor = i + 1; 
  15.             // 更新lastRet游標為當前數組下標 
  16.             return (E) elementData[lastRet = i]; 
  17.         }        public void remove() {         // 檢查刪除元素下標是否合法 
  18.             if (lastRet < 0) 
  19.                 throw new IllegalStateException();            checkForComodification();            try {            // 刪除原數組中制定下標元素 
  20.                 ArrayList.this.remove(lastRet);                //更新游標 
  21.                 cursor = lastRet;                lastRet = -1; 
  22.                 expectedModCount = modCount;            } catch (IndexOutOfBoundsException ex) {                throw new ConcurrentModificationException();            }        }       } 

 

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2019-04-29 14:59:41

Tomcat系統架構

2022-05-23 08:43:02

BigIntJavaScript內置對象

2023-01-17 17:54:47

MQ數據丟失

2025-03-10 08:00:05

2025-07-25 01:45:00

RAG模型技術

2025-07-18 07:19:00

2024-11-14 14:53:04

2021-07-13 07:52:03

ReactHooks組件

2020-05-22 08:11:48

線程池JVM面試

2021-09-28 13:42:55

Chrome Devwebsocket網絡協議

2021-07-29 07:55:20

React Fiber架構引擎

2021-12-02 08:19:06

MVCC面試數據庫

2022-04-10 18:10:24

CURD鏈表

2023-02-20 08:08:48

限流算法計數器算法令牌桶算法

2025-03-11 09:19:53

2020-09-08 06:43:53

B+樹面試索引

2022-11-15 17:45:46

數據庫MySQL

2020-07-02 07:52:11

RedisHash映射

2021-05-28 07:12:58

Mybatis面試官Java

2019-08-23 09:20:35

Spring 5編程Java
點贊
收藏

51CTO技術棧公眾號

亚洲三级精品| av电影高清在线观看| 久久精品网址| 久久av在线看| 屁屁影院国产第一页| 欧美羞羞视频| 亚洲欧美一区二区三区孕妇| 国产精品一区二区三区免费| 天天干,天天干| 一区二区三区网站| 亚洲片在线观看| 污免费在线观看| 手机看片久久| 亚洲午夜影视影院在线观看| 日本视频一区二区不卡| 国产高潮流白浆喷水视频| 免费一区视频| 欧美大片免费观看| 免费看的黄色录像| 任我爽精品视频在线播放| 欧美老人xxxx18| 又粗又黑又大的吊av| 国产福利在线播放麻豆| 2022国产精品视频| 99超碰麻豆| 一级黄色片免费看| 久久久久久久高潮| 午夜精品视频在线| 538精品在线观看| 成人羞羞网站入口| 亚洲欧洲一区二区三区久久| 一区二区三区四区影院| 亚洲色图图片| 欧美在线|欧美| 久久美女福利视频| av第一福利在线导航| 亚洲丝袜制服诱惑| 先锋影音欧美| 丁香婷婷在线| 久久久精品国产免费观看同学| 7777精品久久久大香线蕉小说| 国产精品免费无遮挡无码永久视频| 一区二区亚洲精品| 中文字幕国产亚洲2019| 国产精品毛片一区二区| 欧美一级色片| 精品精品国产高清a毛片牛牛 | 久草资源在线| 亚洲国产精品成人综合色在线婷婷| 精品国产第一页| www.97av.com| 国产精品白丝jk黑袜喷水| 国产精品久久久久秋霞鲁丝 | 91福利国产在线观看菠萝蜜| 国产精品久久久久一区二区三区| 日本精品一区二区| 黄色在线免费观看大全| 91麻豆.com| 蜜桃传媒视频麻豆第一区免费观看 | 风间由美久久久| 精品久久人妻av中文字幕| 日本vs亚洲vs韩国一区三区二区| 日本一区二区不卡| 国产又大又粗又爽| 日日嗨av一区二区三区四区| 日本久久久久亚洲中字幕| 性无码专区无码| 免费亚洲一区| 国产精品草莓在线免费观看| 中日韩在线观看视频| 免费成人在线视频观看| 国产欧美在线视频| 97精品久久人人爽人人爽| 国产一区二区久久| 97av自拍| 天天操天天干天天插| 久久婷婷综合激情| 亚洲7777| yellow91字幕网在线| 亚洲综合丝袜美腿| 两根大肉大捧一进一出好爽视频| 伊人网在线播放| 欧美在线三级电影| 久久精品亚洲天堂| aiss精品大尺度系列| 日韩精品福利网站| 手机毛片在线观看| 女人色偷偷aa久久天堂| 欧美激情精品久久久久久| 日韩精品无码一区二区| 噜噜噜91成人网| 成人亲热视频网站| 免费av一级片| 中文字幕精品综合| 欧美人与动牲交xxxxbbbb| 国产伦久视频在线观看| 欧美系列一区二区| 日本中文字幕精品| 久久综合色占| 久久艹在线视频| 国产毛片aaa| 久99久精品视频免费观看| 国产精品亚洲不卡a| 久久这里精品| 一区二区三区不卡在线观看| 看av免费毛片手机播放| 伊人久久大香伊蕉在人线观看热v| 欧美精品一区二区不卡| 538精品视频| 亚洲图片在线| 国产精品永久在线| 亚洲AV成人无码一二三区在线| 国产精品入口麻豆九色| xxxx18hd亚洲hd捆绑| 亚洲国产尤物| 亚洲第一免费播放区| 少妇太紧太爽又黄又硬又爽小说 | 女人另类性混交zo| 蜜桃在线一区| 中文字幕日韩精品有码视频| 日韩精品无码一区二区| av直播在线观看| 国产伦精品一区二区三区视频金莲| 欧美日韩久久久一区| 国产成人精品无码片区在线| 99精品视频在线观看播放| 91国内精品久久| 超碰免费在线97| 国产精品免费视频观看| 全黄性性激高免费视频| 精品国产一区二区三区2021| 一区二区三区视频在线| www.国产高清| 成人精品鲁一区一区二区| 久久久国产精华液999999| 日韩精品一区二区三区av| 亚洲国产精品久久91精品| 黑鬼狂亚洲人videos| 美女在线视频一区| 日本视频一区二区在线观看| 天堂中文在线播放| 精品国产成人在线影院| 538任你躁在线精品视频网站| 免费一区二区视频| 日韩欧美在线观看强乱免费| 新版的欧美在线视频| 亚洲成人精品视频| 久久久久久久久久久久久久免费看 | 一区二区三区四区高清视频| 久久午夜a级毛片| 一级黄色录像大片| 亚洲欧洲另类国产综合| 天天干天天爽天天射| 欧美日韩激情在线一区二区三区| 茄子视频成人在线| 蜜芽tv福利在线视频| 精品久久久久国产| 朝桐光av一区二区三区| 国产欧美91| 久久伊人资源站| 麻豆成全视频免费观看在线看| 亚洲加勒比久久88色综合| 国产精品成人aaaa在线| 成人av免费网站| 僵尸世界大战2 在线播放| 卡通动漫精品一区二区三区| 午夜精品久久久久久99热| 天堂在线视频免费观看| 香蕉成人伊视频在线观看| 波多野结衣家庭教师在线播放| 国产主播性色av福利精品一区| 最近2019年日本中文免费字幕| 精品无码av在线| 国产成人无遮挡在线视频| 最新av在线免费观看| 国产精品一级在线观看| 久久91精品国产| 黄色片一区二区| 精品久久久久久亚洲精品 | 久久久精品国产免大香伊 | 国产免费一区二区三区四区| 久久精品国产亚洲一区二区三区| 久久久一二三四| 天堂av一区| 69av成年福利视频| 国产综合视频一区二区三区免费| 欧美日韩日日摸| 欧美人禽zoz0强交| 不卡高清视频专区| 欧美精品成人网| 小处雏高清一区二区三区| 成人永久免费| 中文av在线全新| 日韩在线播放视频| 丰满熟女一区二区三区| 欧美一区二区三区久久精品| 欧美国产丝袜视频| 亚洲欧美偷拍另类| 韩国一区二区三区在线观看| 久久视频在线观看中文字幕| 免费高清视频在线一区| 欧美大成色www永久网站婷| 色香蕉在线视频| 欧美综合欧美视频| 欧美黑人精品一区二区不卡| 91一区二区三区在线观看| 一本岛在线视频| 亚洲大黄网站| 亚洲成人一区二区三区| 538任你躁精品视频网免费| 国产99久久精品一区二区永久免费| 日本激情在线观看| 亚洲精品国产精品久久清纯直播 | 一级特黄a大片免费| 男女性色大片免费观看一区二区| 日韩成人三级视频| 日韩理论在线| 精品国产综合区久久久久久| 欧美综合影院| 777午夜精品福利在线观看| 久久综合网导航| 亚洲人a成www在线影院| www.五月天激情| 欧美三级在线视频| 国产区一区二区三| 一区二区三区**美女毛片| 久久久久久久久久影视| 久久精品国产亚洲a| 激情五月开心婷婷| 91高清免费看| 精品动漫3d一区二区三区免费版 | 国产成人一区二区三区影院| 91超碰在线电影| 日韩一区二区三区免费视频| 7m第一福利500精品视频| 羞羞污视频在线观看| 日韩中文在线不卡| 日本福利午夜视频在线| 亚洲大胆人体视频| 国产女人高潮的av毛片| 91福利在线看| 黄色片视频免费| 大伊人狠狠躁夜夜躁av一区| 国产无码精品一区二区| 亚洲精选一二三| 中字幕一区二区三区乱码| 久久夜色精品国产噜噜av| 中文字幕a在线观看| 国产69精品久久久久毛片| 无码人妻少妇色欲av一区二区| 精品一区二区国语对白| 在线观看免费的av| 加勒比av一区二区| 亚洲天堂网2018| 久久99国内精品| 亚洲男人天堂av在线| 精品亚洲porn| 色欲欲www成人网站| 国产成人精品免费视频网站| 久久无码人妻一区二区三区| 国产高清无密码一区二区三区| 97人人模人人爽人人澡| 国产91对白在线观看九色| 无码av免费精品一区二区三区| 成人做爰69片免费看网站| 亚洲乱妇老熟女爽到高潮的片 | 91成人国产精品| 亚洲免费视频二区| 欧美日韩国产精品自在自线| 91国产精品一区| 日韩一区二区影院| 免费观看毛片网站| 日韩精品免费在线视频观看| 免费看男男www网站入口在线| 欧美一区二区三区性视频| 一卡二卡三卡在线| 欧美精品一卡二卡| 国产极品999| 亚洲成人黄色在线| 欧美女同网站| 色婷婷久久av| 91cn在线观看| 91精品国产91久久久久久吃药| 亚洲电影观看| 国产噜噜噜噜噜久久久久久久久 | 亚洲va电影大全| 日韩一区二区三区色| 国产日韩三区| 精品日产免费二区日产免费二区| 亚洲不卡1区| 欧美三级第一页| 日本久久久精品视频| 久久精品国产久精国产| www.四虎在线| 国产三级精品在线| 欧美精品久久久久性色| 黑人巨大精品欧美一区免费视频| 探花国产精品一区二区| 欧美大肚乱孕交hd孕妇| 日韩二区三区| 免费不卡欧美自拍视频| 色资源二区在线视频| 国产裸体写真av一区二区| 亚洲电影一区| 日韩理论片在线观看| 欧美激情一级片一区二区| 欧美视频免费播放| 国产精品一区二区久久不卡 | 91黄色在线视频| 亚洲大胆人体在线| 欧美极品视频| 欧美亚洲第一页| 国产精品一区二区三区四区在线观看| 国产精品三区四区| 国产视频在线观看视频| 国产精一区二区三区| 好吊一区二区三区视频| 亚洲视频一二区| 日韩电影在线观看一区二区| 精品乱人伦小说| 日本中文在线| 国产成人福利网站| 国产精品极品国产中出| 亚洲视频在线观看日本a| 亚洲人体偷拍| 女人扒开腿免费视频app| 国产日韩三级在线| 日韩久久久久久久久| 91精品一区二区三区在线观看| 国产视频三级在线观看播放| 久久久天堂国产精品女人| 成年永久一区二区三区免费视频| 久久久99国产精品免费| 欧美三级乱码| 奇米777在线视频| 国产精品看片你懂得| 成人公开免费视频| 亚洲精品国产美女| 成全电影大全在线观看| 亚洲综合第一页| 色欧美自拍视频| 天美星空大象mv在线观看视频| 99国产精品视频免费观看| 国产精品变态另类虐交| 精品嫩草影院久久| 午夜羞羞小视频在线观看| 51国产成人精品午夜福中文下载| 91九色精品| 欧美成人乱码一二三四区免费| 国产色爱av资源综合区| 看黄色一级大片| 一本色道久久综合狠狠躁篇的优点| 中文在线а√在线8| 好吊妞www.84com只有这里才有精品| 国产精品v日韩精品v欧美精品网站 | 高清在线观看av| 国产精品99导航| 欧美日韩在线观看视频小说| 黄色国产小视频| 欧洲精品二区| 成人黄色激情网| 91精品综合久久久久久久久久久 | 日韩欧美一区二区三区在线观看| 裸模一区二区三区免费| 久久精品30| 成人无码av片在线观看| 欧美性受xxxx黑人xyx性爽| 大胆av不用播放器在线播放 | 高清国产午夜精品久久久久久| 久久在线视频精品| 亚洲国产高清福利视频| 国产网站在线| 日韩欧美一区二区三区久久婷婷| 麻豆久久一区二区| 性色av无码久久一区二区三区| 欧美成人乱码一区二区三区| caoporn视频在线| 欧美极品一区| 久久国产欧美日韩精品| 91成人福利视频| 亚洲福利小视频| 婷婷激情一区| 综合久久国产| 成人av在线影院| 秋霞精品一区二区三区| 中文字幕亚洲激情| 亚洲国产精品免费视频| 日本中文字幕网址| 国产精品青草久久| 亚洲国产一二三区| 日韩av大片免费看| 国产精品99在线观看| 伦理片一区二区| 欧美性生活一区| 色呦呦呦在线观看| 欧美亚洲精品日韩| 国产一区二区在线视频| 中文字幕视频网| 久久综合亚洲社区| 欧美黑白配在线|