LeetCode進階之路(二)java常用的資料結構
一、java常用的資料結構的特點和應用場景
1.陣列
可以容納一串數字,每個數字有單獨的索引,可以方便的通過索引查詢相應位置的數值是多少。
2.字串String
一串字母,不支援用[ ]直接訪問其中的字元,不能直接修改,需要用toCharArray轉化成char[]才可以修改。
字串可以直接用+拼接,但效率低,for迴圈中儘量用StringBuilder進行字串的拼接。
字串的比較用equal別用==,等號容易出現bug。
3.動態陣列ArrayList
ArrayList是一個動態可修改的陣列,沒有固定大小限制,我們可以新增或刪除元素。對陣列的包裝,與C++中的Vector容器功能類似。
4.雙鏈表LinkedList
連結串列不會按照線性順序儲存資料,它在每一個節點裡存下一個節點的地址。單鏈表包含兩個值,當前節點的值和下一個節點的連結。
我們可以用雙鏈表對頭部和尾部的元素操作,直接操作頭部的效率更高,其中contains方法的時間複雜度是O(N)因為它需要遍歷整個連結串列。
ArrayList和LinkList都是List的子類,二者返回的結果均滿足題目要求的List型別。
頻繁的訪問列表中某一個元素,或只需要在列表末尾新增和元素時用ArrayList。
通過迴圈迭代訪問列表中某些元素,或頻繁的在列表開頭、中間、末尾等位置新增刪除元素時用LinkedList。
5.雜湊表HashMap
HashMap是一個散列表,儲存的是鍵值對對映(key-value)
HashCode最多允許一條記錄的鍵值為null,HashMap無序,不會記錄插入的順序。
6.雜湊集合HashSet
不允許有重複元素的集合,允許有null值。
7.佇列Queue
實現了先進先出的資料結構
8.堆疊Stack
棧(Stack)實現了一個後進先出(LIFO)的資料結構。
二、java常用資料結構的詳細使用方法。
1.陣列
①初始化方法
int m=5,n=10; //初始化一個大小為10的int陣列,其中預設值初始化為0 int[] nums=new int[n]; //初始化一個m*n的二維布林陣列,其中的元素預設初始化為falsebollean[][] visited=new boolean[m][m];
②做題時如果題目以函式引數的形式傳入,先做個非空檢查,然後用索引下標訪問其中的元素。
if(nums.length==0){ return; } for(int i=0;i<nums.length;i++){ //訪問nums[i] }
2.字串String
3.動態陣列ArrayList
4.雙鏈表LinkedList
5.雜湊表HashMap
6.雜湊集合HashSet
7.佇列Queue
8.堆疊Stack
