集合(容器)

collection函數庫:包含接口和類;接口是訪問數據的方式,類用來產生對象存放數據。數組

與數組的區別:1.容量能夠自動調節;2.存放的元素能夠是不一樣的數據類型;3.只能存放引用數據類型。安全

collection接口是根接口:定義了存取對象的方法;數據結構

它的子接口set接口和list接口分別定義了存儲方式:函數

set接口:元素是不可重複並且無序的;spa

List接口:元素是有序(指存入順序和取出順序一致)且能夠重複的。.net

list接口主要實現類:線程

  • ArrayListcode

    • 底層數據結構是數組。線程不安全
      • ArrayList底層其實就是一個數組,ArrayList中有擴容這麼一個概念,正由於它擴容,因此它可以實現「動態」增加
      • add(E e)的基本實現了:對象

        • 首先去檢查一下數組的容量是否足夠blog

          • 足夠:直接添加
          • 不足夠:擴容

            • 擴容到原來的1.5倍
            • 第一次擴容後,若是容量仍是小於minCapacity,就將容量擴充爲minCapacity.
  • 與擴容相關ArrayList的add方法底層其實都是arraycopy()來實現的

    看到arraycopy(),咱們能夠發現:該方法是由C/C++來編寫的,並非由Java實現:連接:https://blog.csdn.net/wike163/article/details/6635321

  • 細節再說明

    • ArrayList是基於動態數組實現的,在增刪時候,須要數組的拷貝複製
    • ArrayList的默認初始化容量是10,每次擴容時候增長原先容量的一半,也就是變爲原來的1.5倍
    • 刪除元素時不會減小容量,若但願減小容量則調用trimToSize()
    • 它不是線程安全的。它能存放null值。
  • LinkedList

    • 底層數據結構是鏈表。線程不安全
    • LinkedList底層是雙向鏈表
    • 從結構上,咱們還看到了LinkedList實現了Deque接口,所以,咱們能夠操做LinkedList像操做隊列和棧同樣~
    •  

  • Vector

  • 底層數據結構是數組。線程安全
  • Vector與ArrayList區別

  • Vector底層也是數組,與ArrayList最大的區別就是:同步(線程安全)
  • 由於vector使用了synchronize;
  • 在要求非同步的狀況下,咱們通常都是使用ArrayList來替代Vector的了~

    若是想要ArrayList實現同步,可使用Collections的方法:List list = Collections.synchronizedList(new ArrayList(...));,就能夠實現同步了~

  • 還有另外一個區別:

    • ArrayList在底層數組不夠用時在原來的基礎上擴展0.5倍,Vector是擴展1倍。
相關文章
相關標籤/搜索