1. 程式人生 > 實用技巧 >java基礎篇—陣列與集合

java基礎篇—陣列與集合

文章目錄

1.陣列(array)

概念:同一種類型資料的集合。其實陣列就是一個容器。
定義格式1
元素型別[] 陣列名 = new 元素型別[元素個數或陣列長度];
示例:int[] arr = new int[5];
定義格式2
元素型別[] 陣列名 = new 元素型別[]{元素,元素,……};
int[] arr = new int[]{3,5,1,7};

int[] arr = {3,5,1,7};
陣列的記憶體分析
棧(Stack):存放的都是方法中的區域性變數,方法的執行一定要在棧中執行
堆(Heap):凡是new出來的東西都在堆中,堆記憶體裡面的東西都有一個地址值
方法區(Method Area):儲存.class相關資訊,包含方法的資訊
在這裡插入圖片描述

注意
1.給陣列分配空間時,必須指定陣列能夠儲存的元素個數來確定陣列大小。建立陣列之後不能修改陣列的大小。
2.陣列可以裝任意型別的資料,雖然可以裝任意型別的資料,但是定義好的陣列只能裝一種元素, 也就是陣列一旦定義,那麼裡邊儲存的資料型別也就確定了。
3.陣列靜態分配記憶體,在記憶體中連續
4. 陣列下標從0開始

補充
1.陣列的優點:
隨機訪問性強(通過下標進行快速定位)
查詢速度快
2.陣列的缺點:
插入和刪除效率低(插入和刪除需要移動資料)
記憶體空間要求高,必須有足夠的連續記憶體空間。
陣列大小固定,不能動態拓展

2.集合

2.1.集合(Collection)

在這裡插入圖片描述

  • List下有ArrayList,Vector,LinkedList
  • Set下有HashSet,LinkedHashSet,TreeSet
  • Collection介面下還有個Queue介面,有PriorityQueue類

2.1.1.List

List 介面儲存一組不唯一,有序(插入順序)的物件。
ArrayList: 底層資料結構是陣列,查詢快,增刪慢,執行緒不安全,效率高,可以儲存重複元素

LinkedList: 底層資料結構是連結串列,查詢慢,增刪快,執行緒不安全,效率高,可以儲存重複元素
Vector:底層資料結構是陣列,查詢快,增刪慢,執行緒安全,效率低,可以儲存重複元素
在這裡插入圖片描述

2.1.2.Set

Set 介面儲存一組唯一,無序的物件。
HashSet:底層資料結構採用雜湊表實現,元素無序且唯一,執行緒不安全,效率高,允許包含值為null的元素,但最多隻能一個。
元素的唯一性是靠所儲存元素型別是否重寫hashCode()和equals()方法來保證的,如果沒有重寫這兩個方法,則無法保證元素的唯一性。
LinkedHashSet:底層資料結構採用連結串列和雜湊表共同實現,連結串列保證了元素的順序與儲存順序一致,雜湊表保證了元素的唯一性。執行緒不安全,效率高。
TreeSet:底層資料結構採用二叉樹來實現,元素唯一且已經排好序;唯一性同樣需要重寫hashCode和equals()方法,二叉樹結構保證了元素的有序性。
小結:Set 存入Set的每個元素都必須是唯一的,因為Set不儲存重複元素。加入Set的元素必須定義equals()方法以確保物件的唯一性。Set與Collection有完全一樣的介面。Set介面不保證維護元素的次序。

2.1.3.List和Set的區別

  1. List 介面例項儲存的是有序的,可以重複的元素。Set 介面例項儲存的是無序的,不重複的資料。
  2. List和陣列類似,可以動態增長,根據實際儲存的資料的長度自動增長List的長度。查詢元素效率高,插入刪除效率低,因為會引起其他元素位置改變 <實現類有ArrayList,LinkedList,Vector>
    Set 介面儲存一組唯一,無序的物件。
  3. Set檢索效率低下,刪除和插入效率高,插入和刪除不會引起元素位置改變 <實現類有HashSet,TreeSet>。
    在這裡插入圖片描述

2.2.圖(Map)

Map 介面儲存一組鍵值物件,提供key(鍵)到value(值)的對映。儘管 Map 不是集合,但是它們完全整合在集合中。
Map 的內容可以被當作一組 key 集合,一組 value 集合,或者一組 key-value 對映。
Map下有Hashtable,LinkedHashMap,HashMap,TreeMap
HashMap:效率較高,不是執行緒安全的,允許null值(key和value都允許)
Hashtable:效率較低,是執行緒安全的,不允許null值
TreeMap:通過紅黑樹(R-B tree)實現,TreeMap中的元素預設按照keys的自然排序排列。(對Integer來說,其自然排序就是數字的升序;對String來說,其自然排序就是按照字母表排序)

2.3.HashMap和HashSet的區別

待補充,,,,,

3.陣列和集合的區別

1.陣列:陣列的大小是固定的,並且只能存放同一種類型的資料(基本型別資料或引用型別資料)
2.集合:可以對資料數量不固定的陣列進行儲存和操作。如果程式中不清楚到底有多少物件,需要在容量不足的時候進行自動擴充,則需要使用集合,而不選擇陣列。

4.總結

在集合中常見的資料結構
ArrayXxx:底層資料結構是陣列,查詢快,增刪慢
LinkedXxx:底層資料結構是連結串列,查詢慢,增刪快
HashXxx:底層資料結構是雜湊表。依賴兩個方法:hashCode()和equals()
TreeXxx:底層資料結構是二叉樹。兩種方式排序:自然排序和比較器排序