ArrayList 與數組的「糾纏不清」的曖昧

前言

能不能有一種數組能夠在刪除掉某些元素自動縮小就行了。但是話說哪裏學的Java?數組能刪除元素嗎?今天講一下一個特殊對象——ArrayList,它的出現與存在和數組有着幾分相似。下面按照它是什麼-有什麼用-怎麼用來說?再講講與數組的區別?算法

正話(我的的看法,有誤請多指教)

慣例先明白它是什麼?

  • 源碼搞上!!!很明顯它是一個類,繼承(extends)了AbstractList,實現(implements)了List、RandomAcess等。(extends能夠理解爲全盤繼承了父類的功能。implements能夠理解爲爲這個類附加一些額外的功能)。它是一個容量能夠自動增加的動態數組(並不是數組),能夠支持刪除操做。數組

  • image.png

  • image.png

  • 它的初始容量爲10。下面的構造方法第一個就是構造容量爲10的。要想改變這個容量,就像第二個的構造方法那樣就能夠了。第三個是構造一個包含指定集合的元素的列表,按照他們由集合的迭代器返回的順序。安全

image.png
  • 值得一提的是,Java集合框架中定義了List接口,並且只有兩個實現,除了這個ArrayList還有LinkedList。在數據結構與算法分析書上有着這麼兩句結論,具體獲得是在書中經過了算法得來的。LinkedList在Java和C#中其實是在使用雙鏈表。數據結構

    • ArrayList優點是在末尾添加,刪除,獲取和設置(set and get)。
    • LinkedList優點是從開頭添加級刪除開頭元素。
  • 數組表(ArrayList)和數組很類似在於,讀取的時候爲O(1),在插入時候就變爲O(n)了,不一樣在於這個數組表能夠增長長度,在添加時候,只需表尾編號加一即可以肯定新元素了。多線程

  • ArrayList不是線程安全的。線程安全是說一個對象能夠徹底被多個線程同時使用,不出問題。這個在後面的深刻學習虛擬機會常常遇到——使用多線程之間同步synchronized或使用鎖(lock)能夠解決。框架

那麼它有什麼用呢?

動態的增長和減小元素,實現了ICollection和list接口。固然還能夠靈活得選擇數組的大小。dom

  1. 刪除做用,能夠實現數組不能的刪除

    image.png
  2. 實現添加整個容量,添加元素到數組表中

    image.png

3.經常使用方法
學習

image.png

怎麼用

  1. 想要存儲數字,也就是基本數據類型,就可使用包裝類(位於java.lang下)。線程

    • 基本類型 包裝類
      int Integer
      byte Byte
      short Short
      long Long
      float Float
      doublr Double
      char Character
      boolean Boolean
    • ArrayList<Integer> list = new ArrayList<>;//這樣建立不會報錯了
  2. 實例:生成1-30之間的隨機數,添加到集合裏,存儲5個

    • //主代碼
      ArrayList<Integer> list2= new ArrayList();
      Random r = new Random();
      for(int i = 0; i < 5; i++){
          int num = r.nextInt(30) + 1;
          list.add(num);
      }
相關文章
相關標籤/搜索