第一節 Util 工具類
工具類的Collections和Arrays中的方法全是靜態的,下面主要總結幾個比較重要的方法。
一、Collections工具類:
在Collections工具類中很多方法是用於對List集合進行操作的,如比較,查找,隨機排序等等
1、集合的各種方法:
1)查找:
T max(Collection<? extends T> coll) ---> 根據集合的自然順序,獲取coll集合中的最大元素
T max(Collection<? extends T> coll,Comparator<? super T> comp) ---> 根據指定比較器comp的順序,獲取coll集合中的最大元素
int binarySearch(Lsit<? extends Comparable<? super T>> list,Tkey) ---> 二分法搜索list集合中的指定對象
2)替換:
void fill(List<? super T> list, T obj) ---> 將list集合中的全部元素替換成指定對象obj
boolean replaceAll(List<T> lsit,T oldVal,T newVal) ---> 使用newVal替換list集合中的oldVal值
3)排序:
void shuffle(List<?> list) ---> 使用默認隨機源對list集合中的元素進行隨機排序
void sort(Lsit<T> list) ---> 根據自然順序對list集合中的元素進行排序
void sort(List<T> lsit,Comparator<? super T> c) ---> 根據指定比較器c的排序方式對list集合進行排序
4)反轉
reverse(List<?> list) ---> 反轉list集合中元素的順序
Comparator reverseOrder() ---> 返回一個比較器,強行逆轉了實現Comparable接口的對象的自然順序
Comparator reverseOrder(Comparator<T> cmp) ---> 返回一個比較器,強行逆轉了指定比較器的順序
示例:
創建部分替換方法:
二、Arrays工具類:
1、Lsit<T> asList(T... a) ---> 將數組轉換爲集合
注意:將數組轉換成集合,不可使用集合的增刪方法,因爲數組的長度是固定的,如果進行增刪操作,則會產生UnsupportedOperationException的編譯異常。
a.如果數組中的元素都是對象,則變成集合時,數組中的元素就直接轉爲集合中的元素
b.如果數組中的元素都是基本數據類型,那麼會將該數組作爲集合中的元素存在
2、binarySearch():查找方法,fill():替換方法,sort():排序方法等
特點:可對數組元素進行相應操作,可以接受除boolean之外的其他各種基本數據類型及有序的引用類型數組的參數,且還可以對指定元素的範圍,並可根據指定比較器進行相應的操作
如:sort(T[] a,Comparator<? super T> c)
fill(int[]a,int from,int to)等
3、String toString() 可以接收各種數組類型參數,並返回指定數組內容的字符串表現形式
4、集合轉爲數組
void toString(String[] s) ---> 將集合轉爲指定數組s,並可通過Arrays.toString(s)獲取數組s中的元素
1)指定類型的數組定義的長度:
a.當指定類型的數組長度小於了集合的size,那麼該方法內部會創建一個新的數組,長度爲集合的size
b.當指定類型的數組長度大於了集合的size,就不會創建數組,而是使用傳遞進來的數組,並且多出的元素的值爲null
2)爲何將集合轉爲數組:爲了限定對集合中元素的操作,如增刪,因爲想對創建的集合不做增刪方面的操作。
示例:
一、增強for循環
1、格式:
for(數據類型 變量名 : 被遍歷的集合(Collection)或數組){執行語句}
2、說明:
1)對集合進行遍歷,只能獲取集合的元素,但是不能對集合進行操作。
2)迭代器除了遍歷外,還可進行remove集合中元素的操作,如果使用ListIterator,還可在遍歷過程中,對集合進行增刪改查的操作。
3、傳統for循環和增強for循環區別:
增強for循環有侷限性。必須有被遍歷的目標;而傳統for循環有索引。所以建議在遍歷數組時,使用傳統for循環。
二、可變參數:
如果在參數列表中傳入多個參數,個數不確定,每次都要複寫該方法,可變參數的出現就可以省去複寫的麻煩,而直接對數組進行操作
注意:可變參數一定要定義在參數列表的後面。
示例:
三、靜態導入:
靜態導入,是將類中的所有靜態成員導入進來,但需要注意的是,當導入的兩個類中有同名成員時,需要在成員前加上相應的類名。
當類名重名時,需要制定具體的包名;當方法名重名時,制定具體所屬的對象或類。
1、import static java.util.Arrays.*; ---> 寫入的是Arrays類中的所有靜態成員。
2、import static java.lang.System.*; ---> 導入了System類中的所有靜態成員