集合篇:
既然集合很常用,那麼肯定就會有相應的工具類,可以直接使用,就不用那麼累了,對吧,哈哈。集合也有自己的工具類,那就是:Collections。看清楚,這是帶有s的,不是Collection接口。
既然是工具類,那麼就來看看這個工具類裏面有什麼方法是我們經常用到的?
接下來就來看一下上面的方法怎麼用?
1、排序
這是最基本的排序方式,也就是自然排序,我們也可以傳入一個自定義的Comparator 對其進行排序。
這個和上面那個沒什麼區別,只是sort方法中多傳遞了一個比較器對其進行排序,排序的依據是根據字符串的長度進行排序,短的排前面,長的排後面。
這個就是剛纔的比較器。
2、交換,swap
看結果,紅色框中的兩個元素的位置是不是互換了
3、取最大,max
上面的註釋寫錯,應該是最大的元素,而不是最大的元素的角標。(最前面那張圖的註釋有誤)
有max肯定就還有min,min就不再演示了。
4、二分查找
有一點需要說明的是:二分查找必須要先對其進行排序,否則是沒法找出來或者找出來的是不正確的。
第一行打印的是原集合,第二行打印的是排序後的集合,第三行打印的是該元素的序號,第幾位。最後一行打印出來的是-6,這個要特別說明一下的,當打印出來的是負數的時候,說明這個元素在這個集合中不存在。
5、填充。fill
這個方法也很簡單,不用過多的解釋了,就是將所有的元素替換成指定的元素。
6、反轉 reverseOrder
反轉其實是將比較器進行反轉,例如前面的例子中的按照字符串的長度的升序排序的,現在要變成降序了,我們就不用再去寫多一個比較器了,可以直接用升序的這個比較器去反轉,然後傳入反轉的這個比較器就可以了。
看打印出來的,第一行是原集合,第二行是根據我寫的按照字符串長度排序的比較器對其進行比較的結果,第三行打印的是我們利用反轉回來的比較器對其進行比較的結果。
7、synchronizedList、
同步,同步沒什麼好講的,就是傳入一個不同步的集合,給回一個同步的集合給你,這裏大家可以去看看它的源碼,源碼沒什麼,就是把現有的集合裏面的方法封裝在了同步代碼塊中,有興趣的可以去看源碼。
8、shuffle、隨機
我們直接看打印出來的兩個list,第二個是不是重新的隨機擺放了一下,是的,其實這只是用默認的隨機排列方式,我們也可以自己寫一個Random對其進行隨機排列。
Collections就講到這裏。
再來說幾個比較重要的:
數組變集合:
看到沒,數組是不是變成了集合,是不是很好玩呢?對吧,其實一點都不好玩。
數組變集合,需要注意的是:我們通過數組轉換成的集合,不能對該集合做增刪操作,因爲數組的長度是固定的,所以不能對其做改變其結構的操作,增刪就是對其的結構進行了改變,我們可以做get,contains等操作。
那爲什麼要轉換成集合呢?
要判斷某個元素是否在數組中,就不用去遍歷數據了,直接使用集合的Contains方法。是不是方便很多;
數組變集合還有一個比較重要的是:基本的數據類型不能直接使用:看代碼:
像這個數組,就不能再用 int ,只能用 Integer
集合變數組:
集合變數組就簡單啦。直接調用集合的toArray() 方法即可;
但有一點需要注意的是:我們在轉換成數組的時候,還可以使用這個方法的重載方法,也就是傳入一個指定數組。這裏需要注意的是,如果集合的長度大於數組的長度,那麼就會丟失數據,如果集合長度小於數組的長度,那麼就會使後面的數據全部爲空。
另一種遍歷集合的方式:for each
這是一種增強型for循環。在我們日常編程中,很常用,很常用,很常用!