最近重新學習資料結構與算法以及刷leetcode算法題時,發現不少jdk自帶的方法可以提升刷題的效率。這些小技巧不僅僅對刷算法題帶來便利,對我們平時開發也是很有幫助的。本文以java語言為基礎,記錄了目前已經使用或看到過的一些小技巧,後續在刷題過程中,還會持續更新。
一、數組
1、使用Arrays.sort(int[] a)進行排序
底層采用的是快速排序算法實作的:時間複雜度為O(nlogn),空間複雜度O(logn),不穩定。預設是從小到大排序。
列印結果:
參數可以是其它基本資料類型,也可以是自定義類型,可以通過使用Comparator比較器來自定義排序順序。
例如,降序排列:
2、使用Arrays.toString(int[] arr)将數組組合成字元串
内部是通過StringBuilder + for 循環來實作的,該方法可以友善調試檢視數組的值,而無需自己手動來組裝字元串。
同樣,該方法的參數數組類型可以是其它資料類型。
3、使用Arrays.fill()一次性給數組填充指定值
有時候我們需要将數組中的所有元素都初始化填充為指定值,一般的做法是通過循環來一一指派,這樣做顯然不夠簡潔。所幸,java sdk中提供了簡潔的方法來一步實作,如下所示:
實際上fill()内部實作也是通過for循環一一指派的,但對開發者使用而言,确實簡潔了很多。
二、ArrayList
1、使用構造函數或者addAll将一個集合中的内容添加到新的ArrayList中
内部實作原理:ArrayList内部維護了一個數組,無論是使用構造函數還是addAll方法,都是将給定集合中的元素複制到該數組中。
2、ArrayList與數組互相轉化
(1)使用list.toArray()将ArrayList轉為數組
(2)使用Arrays.asList(數組) 将數組轉為ArrayList
3、使用Collections.reverse(list) 倒轉ArrayList中的元素
4、使用Set來過濾具有相同元素的list
從列印結果可知,list1和list2不是同一個對象,但其中包含的元素一樣(内容和順序都一樣),Set就隻會儲存第一個加入的list。目前隻發現set中添加的List對象時有這個特性,如果使用數組,或者StringBuilder等引用型對象就不生效,且如果兩個list中元素順序不一緻,也不會有過濾效果。
三、HashMap
1、在new HashMap對象時,初始化其中的内容
使用該方法後,就不用專門在某個方法中通過put來添加内容,無疑,在很多場景下可以帶來不少便利。
2、類似于ArrayList類,HashMap也可以通過構造函數或者putAll()方法,一次将已知的hashMap内容添加進來:
四、字元串
1、按照多個空格,對字元串進行分割:split(“\\s+”)或者split(" +")
例如:
2、去掉字元串首尾空字元串:trim()
3、拼接字元串:join()
這裡将數組組合成字元串,用“ ”連接配接。join的第一個參數可以替換其它的連接配接符号,第二個參數除了使用數組外,還可以使用LIst,Deque等集合對象
五、位運算
機器世界計算和存儲最終使用的資料格式都是二進制,采用位運算可以更加貼近機器語言,提高計算效率(當今計算機新能如此強的情況下,一些小範圍使用位運算提升的效率看起來肯定是微乎其微,不過使用位運算逼格肯定提升一個檔次~~)。
1、判斷奇偶
以往判斷奇偶采用的都是 x % 2 == 1 和 x % 2 == 0 ,這裡我們可以使用&運算來判斷:
例如:
2、除以2
以往一個數x除以2的計算方式是x / 2,這裡采用位運算的方式為:
列印結果為:
(持續完善中......)