日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java面试——集合(ArrayList、lterator、LinkedList)源码理解

發(fā)布時間:2024/3/12 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java面试——集合(ArrayList、lterator、LinkedList)源码理解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • ArrayList擴容機制
    • lterator迭代器
    • ArrayList與LinkedList的區(qū)別


ArrayList擴容機制

  • 初始化:(無參時)數(shù)組大小是0,添加第一個元素時是10。有參數(shù)時,數(shù)組大小就是參數(shù)。
  • 擴容條件:超過容量大小的3/4。
  • 以后擴容大小是上一次數(shù)組大小的1.5倍(原容量右移一位+原容量)。
  • addAll()擴容機制: 比較下次擴容的大小和添加元素的個數(shù),取較大值。

lterator迭代器

  • fail-fast:一旦發(fā)現(xiàn)遍歷時,其他線程來修改,即將拋異常(ArrayList)
    • 如何判斷——在迭代器初始化成員變量時會記錄當前集合被修改的次數(shù),在遍歷中一直比較這兩個值是否相等。如果在遍歷的途中集合的修改次數(shù)參數(shù)改變,就會拋出異常
  • fail-safe:遍歷時其他線程來修改,犧牲一致性,保持遍歷(CopyOnWriteArrayList)
    • 初始化時在迭代器成員中復(fù)制了當前集合
    • add()源碼——寫時復(fù)制,即在添加元素時,復(fù)制一個新數(shù)組(長度+1),在新數(shù)組的最后加入新元素。

ArrayList與LinkedList的區(qū)別

  • 底層結(jié)構(gòu):
    • ArrayList是數(shù)組,需要連續(xù)的內(nèi)存
    • LinkedList是雙向鏈表,不需要連續(xù)內(nèi)存
  • 隨機訪問性能
    • ArrayList支持隨機訪問,實現(xiàn)了RandomAccess接口(里面沒有方法,只是一個標識)
    • LinkedList不支持隨機訪問,因為是鏈式存儲,需要遍歷尋址。
  • 插入、刪除對比
    • ArrayList尾部插入、刪除性能可以,其它部分插入、刪除都會移動數(shù)據(jù),因此性能會低(未擴容時)
    • LinkedList頭尾插入刪除性能高
  • 內(nèi)存
    • ArrayList:可以利用CPU緩存、局部性原理
    • LinkedList:占用內(nèi)存多

總結(jié)

以上是生活随笔為你收集整理的java面试——集合(ArrayList、lterator、LinkedList)源码理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。